我有一个混合数据帧字符和数字变量。
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
我想所有的小写字符转换成数据帧为大写。 有没有办法做到这一点在一杆,而不用重复做,在每个字符的变量?
用下面的示例数据开始:
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
从dplyr包,你也可以使用mutate_all()函数结合TOUPPER()。 这将影响字符和因子类。
library(dplyr)
df <- mutate_all(df, funs=toupper)
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,]
如果你用的基因组数据的工作,这是当知道了这个就可以派上用场。
如果您需要处理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