【问题标题】:How to make dataframes from lists by factors in R如何通过R中的因素从列表中制作数据框
【发布时间】:2016-01-12 03:37:04
【问题描述】:

我有一个列表数据

test1 <- list( c(ID='a',VALUE='va1'), 
               c(ID='a',VALUE='va2'),
               c(ID='b',VALUE='vb1'),
               c(ID='c',VALUE='vc1'), 
               c(ID='c',VALUE='vc2'),
               c(ID='c',VALUE='vc3'))

而且,我想拆分并合并为 3 个具有 ID 名称的数据框,

请告诉我如何将每个数据存储到新的数据框中,该数据框的名称与他们的 ID 相同。

|  ID  |    VALUE    |
|  a   |   va1 va2   | 

|  ID  |    VALUE    |    
|  b   |     vb2     | 

|  ID  |    VALUE    |
|  c   | vc1 vc2 vc3 |     

提前致谢

【问题讨论】:

  • 试试d1 &lt;- as.data.frame(do.call(rbind, test1)); split(d1, d1$VALUE)
  • @akrun 这给了我“d1$VALUE 中的错误:$ 运算符对原子向量无效”...
  • 感谢您的回复。它已绑定,但我无法使用 split(d1, d1$ID) 进行拆分。
  • @akrun 我认为split(d1, d1$ID) 是我们所需要的
  • @Jaap 是的,我输入了错误的变量

标签: r list split


【解决方案1】:

base R中我们可以将列表绑定在一起后聚合VALUE,然后拆分。

a <- aggregate(VALUE ~ ., do.call(rbind, test1), toString)
split(a, a$ID)
# $a
#   ID    VALUE
# 1  a va1, va2
# 
# $b
#   ID VALUE
# 2  b   vb1
# 
# $c
#   ID         VALUE
# 3  c vc1, vc2, vc3

要访问每个数据框,您可以使用:

s <- split(a, a$ID)
s$a
#  ID    VALUE
#1  a va1, va2

#or
s[[1]]
#  ID    VALUE
#1  a va1, va2

【讨论】:

  • 非常感谢!它可以工作,但是,如果您不介意,请告诉我如何将每个数据存储到新的数据框中,该数据框的名称带有他们的 ID。谢谢!
  • @liveinfootball 您应该将此请求添加到您的原始问题中。
  • 您可以访问列表中的所有数据框,例如s &lt;- split(a, a$ID); s$as[[2]],而不是在全局环境中创建新对象。
  • 而我的真实数据有超过 40,000 行,大约有 500 个字符,所以当我使用 aggregate() 时它不起作用。
  • 你不应该尝试将这么多的值保存到同一个向量位置。您正在创建一个 250k+ 的单个字符串。
猜你喜欢
  • 1970-01-01
  • 2020-05-10
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 2023-03-21
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多