
[code]

    #データフレーム作成
    q1 <- c("1","3","2","4","5")
    q2 <- c("1 2","1 12","2 11","1 2 11 12","3 12 13")
    q3 <- c("1 2 3 4 5", "2 12 13","*","11 12","1 2 3 4 5 6 7 8 9 10 11 12 13")
    q4 <- c("5","4","3","2","*")
    a <- data.frame(Q1=q1, Q2=q2,Q3=q3,Q4=q4)
    
[/code]

マークカードで読み取った上記のデータフレーム。Q2とQ3のみ複数回答項目で要素がスペース区切りの文字列になっています。

結果としては"Q2_1","Q2_2....Q3_12,Q3_13のように、0 or 1のダミー変数を作成したいのですが、うまくいきません・・。

（separateとmakedummiesを使いました）


CC BY-SA 4.0
2018-07-13T03:23:40.657
45573
2018-08-14T06:01:16.063
2018-07-13T04:34:09.317
19110
29294
question
r
スペースで区切られた複数回答項目をダミー変数にする。


以下、実装例を載せますが、'*' の扱いが良く分からないので、そのままにしてあります。

[code]

    make_answer_table <- function(q, tag) {
      x <- as.numeric(unlist(strsplit(q[q!='*'], " ")))
      vmin <- min(x); vmax <- max(x)
      setNames(data.frame(t(sapply(q, function(item) {
        if (item == '*') return(rep('*', vmax-vmin+1))
        x <- as.numeric(unlist(strsplit(item, " ")))
        sapply(vmin:vmax, function(i){ ifelse(i %in% x, 1, 0) })
      })), row.names=1:length(q)), c(paste(tag, vmin:vmax, sep='_')))
    }
    
    q1 <- c("1","3","2","4","5")
    q2 <- c("1 2","1 12","2 11","1 2 11 12","3 12 13")
    q3 <- c("1 2 3 4 5", "2 12 13","*","11 12","1 2 3 4 5 6 7 8 9 10 11 12 13")
    q4 <- c("5","4","3","2","*")
    
    a <- cbind(
      Q1=q1,
      make_answer_table(q2, "Q2"),
      make_answer_table(q3, "Q3"),
      Q4=q4
    )
    
[/code]


CC BY-SA 4.0
2018-07-13T07:46:23.643
45583
2018-07-13T07:46:23.643
45573
answer