将所有列转换为data.frame中的字符

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?.

  • 我认为可以简化为`x [] &lt;-lapply(x,as.character)` (3认同)