我有一个包含 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
(假设数据集对象已经在全局环境中创建)然后循环 list
与 map
,更改 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/