2017-01-13 8 views
3

私は、調査データを使って複数の応答を1つの列で処理しようとしています。問題は、カンマで区切られた1-5個の回答がある可能性があることです。この中へdplyrの等しくない列(reverse toString)で区切る方法

df <- data.frame(
    splitThis = c("A,B,C","B,C","A,C","A","B","C") 
) 

> df 
    splitThis 
1  A,B,C 
2  B,C 
3  A,C 
4   A 
5   B 
6   C 

:感謝

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

> intoThis 
    A B c 
1 1 1 1 
2 0 1 1 
3 1 0 1 
4 1 0 0 
5 0 1 0 
6 0 0 1 

どれ論争のヘルプ私はこれを有効にするにはどうすればよい

答えて

4

OPもdplyr/tidyr

library(dplyr) 
library(tidyr) 
library(tibble) 
rownames_to_column(df, "rn") %>% 
      separate_rows(splitThis) %>% 
      table() 

それともtidyverseパッケージ

rownames_to_column(df, "rn") %>% 
     separate_rows(splitThis) %>% 
     group_by(rn, splitThis) %>% 
     tally %>% 
     spread(splitThis, n, fill=0) %>% 
     ungroup() %>% 
     select(-rn) 
# A tibble: 6 × 3 
#  A  B  C 
#* <dbl> <dbl> <dbl> 
#1  1  1  1 
#2  0  1  1 
#3  1  0  1 
#4  1  0  0 
#5  0  1  0 
#6  0  0  1 
を使用して説明したように我々は ,

library(qdapTools) 
mtabulate(strsplit(as.character(df$splitThis), ",")) 
# A B C 
#1 1 1 1 
#2 0 1 1 
#3 1 0 1 
#4 1 0 0 
#5 0 1 0 
#6 0 0 1 

によって分割後qdapToolsからmtabulateを使用することができます

+0

あなたは天才で学者です。これを実装して、それが自分のデータで機能するかどうかを見てみましょう。なんらかの理由で私は 'tibble'が' Hadleyverse'パッケージだと思っていました。 – Zafar

+1

@ダンはいチブルはそれの一部です。前の記事では 'base R 'にある' table'を使って結果を得ましたので、 'spread'などを使うと思いました。寛大なコメントをありがとう。私はあなたからの質問や他の人からの偉大な答えから、自分自身を毎日学んでいると考えています。 – akrun

+0

私の調査データでうまくいきました、ありがとう! – Zafar

関連する問題