将合并应用于数据框列表

5

我有一个只包含一列字符值的数据框列表:

> list.df[c(1,5,8)]
$1
     X..1L..
1      A
2      B
3      C
4      D
5      E
6      F
7      G
8      H

$5
   X..5L..
1    A
2    C
3    D
4    F
5    G

$8
   X..8L..
1   A
2   D
3   F
4   G
5   H
6   I

还有另一个数据帧

> df
  V2  V5      V9
1  A  31 0.13029
2  B  80 0.29443
3  C 166 0.01354
4  D  11 0.39589
5  E  62 0.61794
6  F  40 0.35808
7  G  31 0.62581
8  H  54 0.24983
9  I  19 0.47199
10 J  97 0.26518

我希望将列表中的每个数据框与df合并,我尝试创建了一个函数func <- function(x,y){merge(x, y, by.x=x[,1], by.y=y[,1])},然后将其应用于列表,但它不起作用。
lapply(list.df, func, list.df, df)

我知道可以将list.df拆分成几个数据框,然后逐个合并它们,但我想知道是否有一种方法可以在list中完成。

谢谢

2个回答

9
你有两个错误。一个在你的函数中,另一个在你调用函数的方式上:
func <- function(x,y){merge(x, y, by.x=names(x)[1], by.y=names(y)[1])}
lapply(list.df, func, df)

1
嗨@eddi,当列表有9,000个元素且数据框的维度为17,000行乘以1000列时,有没有办法加速函数fun?非常感谢。 - user2380782
2
使用data.table代替data.frame - 在SO或谷歌上进行快速搜索即可开始,类似于dt = data.table(df, key = 'V2'),然后使用fn = function(x){df[x]}; lapply(list.df, func)可能是一个不错的起点。 - eddi

0

不太确定这是否有帮助,但尝试合并列表

df.list <- do.call(merge,list.df[c(1,5,8)])

但是有一件事我想注意的是,从外观看,你的数据框列没有名称...在合并之前给列命名,这应该会有所帮助...
colnames(df) <- c("col1","col2","col3")

1
as.data.frame(x) 中出现错误:缺少参数“x”,当我添加 df.list <- do.call(merge, list.df, df) 时,出现错误:如果(引用),则 args <- apply(args, enquire)。 - user2380782

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接