【问题标题】:How to add a list to a data frame in R?如何将列表添加到 R 中的数据框?
【发布时间】:2015-06-29 15:23:29
【问题描述】:

我有两张表如下:

a = read.table(text=' a b
1 c
1 d
2 c
2 a
2 b
3 a
', head=T)



b = read.table(text=' a c
1 x i
2 y j 
3 z k
', head=T)

我希望结果是这样的:

1 x i c d
2 y j c a b
3 z k a

本来我想用tapply将它们转换成列表(例如aa = tapply(a[,2], a[,1], function(x) paste(x,collapse=","))),然后将其附加回表 b,但我被卡住了......

有什么建议吗? 谢谢一百万。

【问题讨论】:

  • 你想合并两个data.frames。
  • 你为什么不把它存储在一个列表中呢? data.frame 是具有一定限制的列表,例如列表的所有元素都具有相同的长度,这不适用于您的数据。即使您可以使用"" 模拟所有元素的长度相同,您也可能会弄乱您的数据。
  • @rmuc8,我也这么认为.. 但是例如, (bb = tapply(b[,1:2], b[,1], function(x) paste(x,collapse= ","))) 给我“参数必须具有相同长度”的错误.. 怎么办?
  • @Pascal ,是的,我想合并 2 帧,以元素 1 为例,我不希望结果是 1 xic,1 xid,我想要 1 xicd,这就是为什么我我被困住了。 :(

标签: r list join merge


【解决方案1】:

一种方法:

mapply(FUN = c, 
       lapply(split(b, row.names(b)), function(x) as.character(unlist(x, use.names = FALSE))), 
       split(as.character(a$b), a$a), 
       SIMPLIFY = FALSE)
# $`1`
# [1] "x" "i" "c" "d"
# 
# $`2`
# [1] "y" "j" "c" "a" "b"
# 
# $`3`
# [1] "z" "k" "a"

【讨论】:

    猜你喜欢
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2022-01-05
    相关资源
    最近更新 更多