gpt4 book ai didi

r - dplyr bind_rows 改变类型以匹配

转载 作者:行者123 更新时间:2023-12-04 15:57:40 26 4
gpt4 key购买 nike

假设我有两个简单的数据框,如下所示:

stuff <- data.frame('a', 'b')
col1 <- c(1,2,3)
stuff <- data.frame(col1)
col1 <- c('1','2', '3')
stuff2 <- data.frame(col1)

我想将它们合并到一个数据框中,并尝试使用 dplyrbind_rows ,例如像这样:
bind_rows(stuff, stuff2)

但是(不出所料)我得到了

Error in bind_rows_(x, .id) : Column col1 can't be converted from numeric to factor



有没有办法告诉我 bind_rows将行突变为目标(或尝试)?

最佳答案

我会使用 data.table 的 rbindlist ...
由于此功能需要一个列表作为输入,您将自动丢失字符因素问题...

rbindlist 还有一些让生活更轻松的功能(而且速度也非常快!)

#lets make'a named list
l <- list( stuff = stuff, stuff2 = stuff2 )
#now bind the two df's together
library(data.table)
rbindlist( l, use.names = TRUE )
# col1
# 1: 1
# 2: 2
# 3: 3
# 4: 1
# 5: 2
# 6: 3

当你想要更多的功能时,更好的东西就会出现……假设你想知道哪些数据来自哪个 df……这里名称列表开始发挥作用
rbindlist( l, use.names = TRUE, idcol = TRUE )
# .id col1
#1: stuff 1
#2: stuff 2
#3: stuff 3
#4: stuff2 1
#5: stuff2 2
#6: stuff2 3

或者,当并非所有列名都存在于所有 df 中时:
col2 <- c('1','2', '3')
stuff2 <- data.frame(col2)
rbindlist( l, use.names = TRUE, fill = TRUE, idcol = "origin" )
# origin col1 col2
# 1: stuff 1 <NA>
# 2: stuff 2 <NA>
# 3: stuff 3 <NA>
# 4: stuff2 NA 1
# 5: stuff2 NA 2
# 6: stuff2 NA 3

如果列名不相同,但您仍想将两个 df 放入一列:
col1 <- c(1,2,3)
stuff <- data.frame(col1)
col2 <- c('1','2', '3')
stuff2 <- data.frame(col2)
#create a named list
l <- list(stuff = stuff, stuff2 = stuff2)
rbindlist( l )

# col1
# 1: 1
# 2: 2
# 3: 3
# 4: 1
# 5: 2
# 6: 3

关于r - dplyr bind_rows 改变类型以匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51256486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com