如何强制将字符列转换为列表列

问题描述:

我正在尝试绑定数据帧行。我在聚合后生成一些列表列的数据框,但有些是字符。我找不到绑定它们的方法。我尝试使用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 
+0

你可以使用'rbind(df2,df1)' - 注意它会将“b”列变成一个列表。目前'df1'有一个数字和列表列,'df2'有一个数字和字符列。 –

我不知道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'并让我知道它是否工作。如果没有,也许别人有你的直接修复。 –