2017-08-16 27 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のように、1つのデータフレームに文字データがあり、もう1つのデータフレームにリストデータがあるようには見えません。文字列をリストに変換してから、bind_rowsを呼び出してみてください。

+0

はい。それは動作します。私はdplyr :: bind_rowsを使用してきました。なぜなら、データフレームが乱雑で、いくつかの列が欠落しているからです。どのようにbind_rowsでこれを動作させるのか?多分gtools :: smartbind ... – Eric

+0

@Ericあなたは 'bind_rows'のための私の提案を試してみて、それがうまくいけば教えてください。そうでない場合は、他の人があなたのために直接修正している可能性があります。 –

関連する問題