2016-10-31 4 views
0

私は一般的にRとプログラミングの新人です。私はバイナリデータを含む非常に大きなデータフレームを持っています。私は行を横切って読む必要があり、最後に新しい列に列名を1つ印刷する場所があります。 1行に複数の1がある場合は、すべての列ヘッダーを長いカンマ区切りリストに連結したいと思います。この優れたを説明するために、以下の試験データフレームを参照してください。R - 行にxが含まれている場合新しい列の印刷列ヘッダー

B <- data.frame(A = c(0, 1, 1, 0), 
      B = c(0, 1, 0, 1)) 

    A B 
1 0 0 
2 1 1 
3 1 0 
4 0 1 

は、私が生成する出力は次のようになりますのための新しい列「C」が作成され

A B C 
1 0 0 
2 1 1 A, B 
3 1 0 A 
4 0 1 B 

と列のヘッダー1を含む行が文字列に追加されます。

おかげ

答えて

1

はこれを試してみてください:

df$C <- apply(df, 1, function(x) paste0(names(df)[as.logical(x)], collapse = ",")) 

# A B C 
#1 0 0  
#2 1 1 A,B 
#3 1 0 A 
#4 0 1 B 
+1

素晴らしいと感謝をベクトル化アプローチを使用することができます! (タイマーの後に正解として受け入れる) – 0mm3

0

我々は、gsub

trimws(gsub("^NA,*|,*\\s+NA$", "", do.call(paste, 
     c(as.data.frame(`dim<-`(names(B)[(NA^(B==0))*col(B)], dim(B))), sep=", ")))) 
#[1] ""  "A, B" "A" "B" 
関連する問題