use*_*rJT 22 r dataframe tidyverse
考虑具有混合数据类型的data.frame.
出于奇怪的目的,用户需要将所有列转换为字符.怎么做得最好?解决问题的整合尝试是这样的:
map(mtcars,as.character) %>% map_df(as.list) %>% View()
c2<-map(mtcars,as.character) %>% map_df(as.list)
Run Code Online (Sandbox Code Playgroud)
当我打电话时str(c2),应该说一个包含所有字符的tibble或data.frame.
另一种选择是对一些参数设置write.csv()或write_csv()实现生成的文件输出同样的事情.
Jak*_*son 38
你也可以使用dplyr::mutate_all.
library(dplyr)
mtcars %>%
mutate_all(as.character)
Run Code Online (Sandbox Code Playgroud)
Sam*_*rke 14
mutate_all然后重新生成data.frame lapply将导致data.frame的属性发生变化.如果需要保留与基础data.frame关联的row.names,labels或其他属性,请尝试:
x[, ] <- lapply(x[, ], as.character)
Run Code Online (Sandbox Code Playgroud)
这会将列转换为字符类,保留data.frame的属性.
例
x <- mtcars
attr(x, "example") <- "1"
Run Code Online (Sandbox Code Playgroud)
仅在下面的最后一种情况下example保留了属性:
x %>%
mutate_all(as.character) %>%
attributes()
data.frame(lapply(x, as.character)) %>%
attributes()
x[, ] <- lapply(x[, ], as.character)
attributes(x)
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的输入始终是单列data.frame,x[, ]则会返回向量,而不是data.frame.要解决此问题,请参阅如何从data.frame中提取单个列作为data.frame?.