2017-08-16 46 views
0

我正在嘗試綁定數據幀行。我在聚合後生成一些列表列的數據框,但有些是字符。我找不到綁定它們的方法。我嘗試使用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'有一個數字和字符列。 –

回答

2

我不知道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'並讓我知道它是否工作。如果沒有,也許別人有你的直接修復。 –