如何强制将字符列转换为列表列
问题描述:
我正在尝试绑定数据帧行。我在聚合后生成一些列表列的数据框,但有些是字符。我找不到绑定它们的方法。我尝试使用as.list()
转换字符列,但没有奏效。如何强制将字符列转换为列表列
library(dplyr)
df1 <- data.frame(a = c(1,2,3),stringsAsFactors = F)
df1$b <- list(c("1","2"),"4",c("5","6"))
> df1
a b
1 1 1, 2
2 2 4
3 3 5, 6
df2 <- data.frame(a=c(4,5),b=c("9","12"),stringsAsFactors = F)
> df2
a b
1 4 9
2 5 12
dplyr::bind_rows(df2,df1)
Error in bind_rows_(x, .id) :
Column `b` can't be converted from character to list
答
我不知道dplyr
库很好,但低于使用基础R的rbind()
似乎工作:
df1 <- data.frame(a = c(1,2,3),stringsAsFactors = F)
df1$b <- list(c("1","2"),"4",c("5","6"))
df2 <- data.frame(a=c(4,5),b=c("9","12"),stringsAsFactors = F)
result <- rbind(df1, df2)
class(result$a)
[1] "numeric"
class(result$b)
[1] "list"
Demo
如果你想获得这与bind_rows()
工作,首先查看错误消息。它看起来像dplyr
不喜欢那个数据框有字符数据,而另一个有列表数据。您可以尝试将字符列转换为列表,然后拨打bind_rows
,例如
df2$b <- as.list(df2$b)
dplyr::bind_rows(df2,df1)
+0
是的。这样可行。我一直在使用dplyr :: bind_rows,因为数据框很混乱,有些缺少一些列。任何想法如何使这与bind_rows工作?也许gtools :: smartbind ... – Eric
+0
@Eric你可以尝试我的建议'bind_rows'并让我知道它是否工作。如果没有,也许别人有你的直接修复。 –
你可以使用'rbind(df2,df1)' - 注意它会将“b”列变成一个列表。目前'df1'有一个数字和列表列,'df2'有一个数字和字符列。 –