从小写转换为大写在数据帧的所有字符变量的所有值(Convert from lowercase to

2019-09-02 19:55发布

我有一个混合数据帧字符和数字变量。

city,hs_cd,sl_no,col_01,col_02,col_03
Austin,1,2,,46,Female
Austin,1,3,,32,Male
Austin,1,4,,27,Male
Austin,1,5,,20,Female
Austin,2,2,,42,Female
Austin,2,1,,52,Male
Austin,2,3,,25,Male
Austin,2,4,,22,Female
Austin,3,3,,30,Female
Austin,3,1,,65,Female

我想所有的小写字符转换成数据帧为大写。 有没有办法做到这一点在一杆,而不用重复做,在每个字符的变量?

Answer 1:

用下面的示例数据开始:

df <- data.frame(v1=letters[1:5],v2=1:5,v3=letters[10:14],stringsAsFactors=FALSE)

  v1 v2 v3
1  a  1  j
2  b  2  k
3  c  3  l
4  d  4  m
5  e  5  n

您可以使用 :

data.frame(lapply(df, function(v) {
  if (is.character(v)) return(toupper(v))
  else return(v)
}))

这使 :

  v1 v2 v3
1  A  1  J
2  B  2  K
3  C  3  L
4  D  4  M
5  E  5  N


Answer 2:

从dplyr包,你也可以使用mutate_all()函数结合TOUPPER()。 这将影响字符和因子类。

library(dplyr)
df <- mutate_all(df, funs=toupper)


Answer 3:

A面注释这里使用回答这些问题的。 朱巴的回答是伟大的,因为它是非常有选择性的,如果你的变量或者是数字小或字符串。 但是,如果你有一个组合(例如A1,B1,A2,B2)等,这将无法正常转换的字符。

作为@Trenton霍夫曼指出,

library(dplyr)
df <- mutate_each(df, funs(toupper))

同时影响性格和要素类和适用于“混合变量”; 例如,如果你的变量同时包含字符和数字小值(例如A1)两者都将被转换为一个因素。 总体而言,这是不是一个太大的关注,但如果你最终想要的比赛data.frames例如

df3 <- df1[df1$v1 %in% df2$v1,]

其中DF1已已被转换和DF2包含非转化data.frame或类似,这可能会导致一些问题。 解决方法是,你有短暂运行

df2 <- df2 %>% mutate_each(funs(toupper), v1)
#or
df2 <- df2 %>% mutate_each(df2, funs(toupper))
#and then
df3 <- df1[df1$v1 %in% df2$v1,]

如果你用的基因组数据的工作,这是当知道了这个就可以派上用场。



Answer 4:

它简单与r使用功能

f <- apply(f,2,toupper)

无需检查,如果列是字符或任何其他类型。



Answer 5:

如果您需要处理data.frames包括您可以使用的因素:

df = data.frame(v1=letters[1:5],v2=1:5,v3=letters[10:14],v4=as.factor(letters[1:5]),v5=runif(5),stringsAsFactors=FALSE)

df
    v1 v2 v3 v4        v5
    1  a  1  j  a 0.1774909
    2  b  2  k  b 0.4405019
    3  c  3  l  c 0.7042878
    4  d  4  m  d 0.8829965
    5  e  5  n  e 0.9702505


sapply(df,class)
         v1          v2          v3          v4          v5
"character"   "integer" "character"    "factor"   "numeric"

使用mutate_each_因素转换为字符,然后将所有为大写

   upper_it = function(X){X %>% mutate_each_( funs(as.character(.)), names( .[sapply(., is.factor)] )) %>%
   mutate_each_( funs(toupper), names( .[sapply(., is.character)] ))}   # convert factor to character then uppercase

  upper_it(df)
      v1 v2 v3 v4
    1  A  1  J  A
    2  B  2  K  B
    3  C  3  L  C
    4  D  4  M  D
    5  E  5  N  E

sapply( upper_it(df),class)
         v1          v2          v3          v4          v5
"character"   "integer" "character" "character"   "numeric"


文章来源: Convert from lowercase to uppercase all values in all character variables in dataframe