2017-05-28 41 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