【问题标题】:list of character vectors of unequal length to data.frame与 data.frame 长度不等的字符向量列表
【发布时间】:2012-06-28 12:27:37
【问题描述】:

我有一个如下所示的命名列表:

> head(pathways)
$<NA>
NULL
$`2`
[1] "hsa04610"
$`9`
[1] "hsa00232" "hsa00983" "hsa01100"
$`10`
[1] "hsa00232" "hsa00983" "hsa01100"
$<NA>
NULL
$<NA>
NULL

更早地描述它。每个列表的名称是一个 id 号,作为列表元素的字符向量的每个元素的条目是另一个 id 号。我可以使用is.na() 轻松过滤掉$&lt;NA&gt; 条目,但是我想更改其余部分,使其看起来像:

id   another_id
2    hsa04610   
9    hsa00232   
9    hsa00983   
9    hsa01100   
10   hsa00232  
10   hsa00983
10   hsa01100


> dput(test)
structure(list(`NA` = NULL, `2` = "hsa04610", `9` = c("hsa00232", 
"hsa00983", "hsa01100"), `10` = c("hsa00232", "hsa00983", "hsa01100"
), `NA` = NULL, `NA` = NULL), .Names = c(NA, "2", "9", "10", 
NA, NA))

有什么想法吗?

【问题讨论】:

  • 如果您要发布来自dput(head(pathways)) 的输出会有所帮助。
  • 所以在等待答案的过程中,时间不长(干杯,顺便说一句)我继续谷歌并找到这篇文章stackoverflow.com/questions/10432993/…,它基本上说我可以使用堆栈(路径)。这行得通吗?好像很简单?
  • 它确实对您的测试对象起作用。 (甚至没有删除 NA 条目......令我惊讶的是。)在谷歌搜索上的荣誉,顺便说一句。
  • 发完问题立马发现有点尴尬。

标签: r list dataframe


【解决方案1】:

所以我找到了另一个似乎可行的答案。

stack(pathways)

这似乎太容易了,但是哦。

【讨论】:

  • 不错的发现。 stack 做你期望 unsplit 做的事情。
【解决方案2】:

因此,如果您有列表 l(在删除 NA 之后),那么:

another_id <- unlist(l)
id <- rep(names(l), unlist(lapply(l, length)))
data.frame(id, another_id, row.names=NULL)

会给出结果。

【讨论】:

    【解决方案3】:
    #sample data
    pathways <- list(`1` = letters[1:3], `2` = LETTERS[4:5], `3` = 6:9, `4` = NULL)
    
    #a solution
    n <- vapply(pathways, length, integer(1))
    id <- rep.int(names(pathways), n)
    another_id <- unlist(pathways, use.names = FALSE)
    data.frame(id = id, another_id = another_id)
    

    【讨论】:

      猜你喜欢
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 2013-04-07
      • 2021-07-25
      • 2018-12-31
      • 1970-01-01
      • 2019-12-19
      相关资源
      最近更新 更多