【发布时间】:2020-12-06 03:42:31
【问题描述】:
我有一个包含字符、整数和因子的混合数据框,我想将它们转换为大写。这是一个经常发布的问题(例如here),但我无法在不转换数据类型的情况下将字符和因子更改为大写。下面的工作示例:
# create a three column dataframe with characters, integers and factors:
df <- data.frame(v1=letters[1:5],v2=1:5,v3=as.factor(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
glimpse(df)
# v1 <chr> "a", "b", "c", "d", "e"
# v2 <int> 1, 2, 3, 4, 5
# v3 <fct> j, k, l, m, n
mutate_all 和 toupper 变为大写,但将因子转换为字符:
df <- mutate_all(df, funs(toupper))
glimpse(df)
# v1 <chr> "A", "B", "C", "D", "E"
# v2 <chr> "1", "2", "3", "4", "5"
# v3 <chr> "J", "K", "L", "M", "N"
mutate_if 和 str_to_upper 适用于 is.character 但不适用于因子:
df <- df %>% mutate_if(is.character, str_to_upper)
glimpse(df)
# v1 <chr> "A", "B", "C", "D", "E"
# v2 <int> 1, 2, 3, 4, 5
# v3 <fct> j, k, l, m, n
mutate_if 和 str_to_upper 适用于 is.factor 但将因子转换为字符:
df <- df %>% mutate_if(is.character, str_to_upper)
df <- df %>% mutate_if(is.factor, str_to_upper)
glimpse(df)
# v1 <chr> "A", "B", "C", "D", "E"
# v2 <int> 1, 2, 3, 4, 5
# v3 <chr> "J", "K", "L", "M", "N"
理想情况下,我想找到一个保留数据类型并且可以应用于任何数据帧的一揽子解决方案。
【问题讨论】: