【问题标题】:List to dataframe列表到数据框
【发布时间】:2017-05-28 21:25:52
【问题描述】:

我有一个 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

请帮忙!

谢谢

【问题讨论】:

    标签: r list dataframe odk


    【解决方案1】:

    您可以为此使用setNamesstackdcast

    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
    

    【讨论】:

    • 感谢您的快速回答。当我运行代码时,出现错误:> ex2 1 并且只使用第一个元素
    • 很好!!谁能解释为什么上述使用 setNames 的答案有效,但直接分配 ex2 &lt;- stack(example, seq_along(example)) 会产生消息“rep.int(names(x), lengths(x)) 中的错误:'times' 值无效”
    • @epi99 - 因为它是多余的 - 名称已经在上一行的 example 上,然后用于命名 stack。它可能只是stack(example),你会得到相同的结果。
    • @user3148607 你能说得更具体点吗?它对我来说很好用
    猜你喜欢
    • 2020-09-13
    • 2017-10-04
    • 1970-01-01
    • 2018-10-31
    • 2021-03-27
    • 2019-09-08
    • 2021-04-10
    • 1970-01-01
    • 2012-09-12
    相关资源
    最近更新 更多