2017-05-28 63 views
1

我有存儲在列表中的select_multiple問題的結果。這來自收集數據集OpenDataKit列表到數據框

example <- list("a", c("b", "c"), c("d", "e", "f"), c("")) 

在下面備案#4的例子中,沒有答案(意爲NA所有選項)。

我需要從這個列表中創建一個數據框,其中來自選擇倍數的每個選項將成爲一個新變量。列表中的每個元素都是事實上的長度不一樣。

結果應該是這樣的:

variable | a b c d  e f 
row1  | 1 0 0 0  0 0 
row2  | 0 1 1 0  0 0 
row3  | 0 0 0 1  1 1 
row4  | <NA> <NA><NA> <NA><NA> <NA> 

我發現選擇與stri_list2matrix,但不提供預期的結果。

我試着以及

df <-data.frame(lNames <- rep(names(example), lapply(example, length)), 
        lVal <- unlist(example)) 

,並得到了相同的

arguments imply differing number of rows 

請幫幫忙!

感謝

回答

1

你可以使用setNames,對於stackdcast

example <- list("a", c("b", "c"), c("d", "e", "f"), c("")) 
example <- setNames(example, seq_along(example)) 

ex2 <- stack(example) 
ex2[ex2$values=='','values'] <- NA 

library(reshape2) 
dcast(ex2, ind ~ values, fun.aggregate = length) 

這將導致:

ind a b c d e f NA 
1 1 1 0 0 0 0 0 0 
2 2 0 1 1 0 0 0 0 
3 3 0 0 0 1 1 1 0 
4 4 0 0 0 0 0 0 1 
+0

感謝您的快速答覆。 當我運行的代碼,我得到一個錯誤: > EX2 < - 堆疊(例如,名稱(例如)) 錯誤如果(滴){:參數不是解釋成邏輯 此外:警告消息: 如果(降){: 條件有長度> 1,只有第一個元素將被使用 – user3148607

+0

尼斯!任何人都可以解釋爲什麼上面的答案,它使用setNames,工作,但直接分配'ex2 < - 堆棧(例如,seq_along(示例))'產生消息「錯誤在rep.int(名稱(x),長度(x)):無效的「時間」值「 – epi99

+0

@ epi99 - 因爲它是多餘的 - 名稱已經在上一行的」示例「中,然後用於命名」堆棧「。它可能只是'stack(example)',你會得到相同的結果。 – thelatemail