r - 跨多个数据帧更改列的类别

标签 r dataframe dplyr

我有一个包含 59 个数据框的列表,我想将它们合并在一起。不幸的是,因为我已经抓取了其中的许多列,所以数据框中的列具有不同的类。它们都有“名称”列,有些采用因子形式,有些采用字符形式。我想将它们全部更改为字符形式。我尝试了以下方法

dts <- c("Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida",
               "Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine",
               "Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska",
               "Nevada","New_Hampshire","New_Jersey","New_Mexico","New_York","North_Carolina","North_Dakota",
               "Ohio","Oklahoma","Oregon","Pennsylvania","Rhode_Island","South_Carolina","South_Dakota","Tennessee",
               "Texas","Utah","Vermont","Virginia","Washington","West_Virginia","Wisconsin","Wyoming","Federal",
               "CCJail","DC","LAJail","NOLA","NYCJail","OCJail","PhilJail","TXJail")


for(i in 1:length(dts)){
        dts[i]$Name <- as.character(dts[i]$Name)
}

但它只给了我错误“错误:$运算符对于原子向量无效”。 有谁知道一个好的解决方法?预先感谢您的帮助!

我的最终目标是运行

dta <-dplyr::bind_rows(Alabama,Alaska,Arizona,Arkansas,California,Colorado,Connecticut,Delaware,Florida,
       Georgia,Hawaii,Idaho,Illinois,Indiana,Iowa,Kansas,Kentucky,Louisiana,Maine,
       Maryland,Massachusetts,Michigan,Minnesota,Mississippi,Missouri,Montana,Nebraska,
       Nevada,New_Hampshire,New_Jersey,New_Mexico,New_York,North_Carolina,North_Dakota,
       Ohio,Oklahoma,Oregon,Pennsylvania,Rhode_Island,South_Carolina,South_Dakota,Tennessee,
       Texas,Utah,Vermont,Virginia,Washington,West_Virginia,Wisconsin,Wyoming,Federal,CCJail,
       DC,LAJail,NOLA,NYCJail,OCJail,PhilJail,TXJail)

但我收到错误“错误:无法合并 ..1$Residents.Confirmed..2$Residents.Confirmed 。”每个数据框中都有大量的列,并且它们通常是不同的类。如果有人有更优雅的解决方案,我也愿意接受!谢谢!

最佳答案

我们可以将数据集加载到list中与 mget (假设数据集对象已经在全局环境中创建)然后循环 listmap ,更改 class mutate 中的“名称”列并使用后缀 _dfr 进行行绑定(bind)在map

library(dplyr)
library(purrr)
out <- map_dfr(mget(dts), ~ .x %>% 
                  mutate(Name = as.character(Name)))

如果有很多列不同class 。也许,最好将所有列转换为单个类,然后绑定(bind)

out <- map_dfr(mget(dts), ~ .x %>%
                   mutate(across(everything(), as.character)))
out <- type.convert(out, as.is = TRUE)

如果dplyr版本是< 1.0.0 ,使用mutate_all

out <- map_dfr(mget(dts), ~ .x %>%
               mutate_all(as.character))

关于r - 跨多个数据帧更改列的类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62605872/

相关文章:

r - 创建 data.frame 时添加到列名称中的 X 和点

r - 合并两个 `data.table`对象

pandas - 使用多索引创建空的 pandas 数据框

python - 如何获取数据框中的事件频率和每个事件的频率?

r - dplyr 可以访问 POSTGRES 9.3.5 VIEW 吗?

r - 整数类型分为两列

r - 将iframe嵌入 Shiny 的应用程序中

r - 从日期变量创建月末日期

r - 打印 dplyr 的过滤功能过滤掉的行数

r - 如何将向量强制转换为 tibble?