R 以迭代方式将多列中的一列合并到列表中的数据帧

R 以迭代方式将多列中的一列合并到列表中的数据帧,r,list,R,List,在迭代组合单个数据帧中的列与列表中的其他数据帧时,我遇到了一个(可能很小)问题。一些数据可以说明: #加载示例数据 图书馆(素食主义者) 数据(varechem) 数据(varespec) #生成具有重叠行和不同列数的预测表 varespec1根据Gregor的评论,我提出了类似的方法。我没有将完整的varechem_二进制文件与subset_列表的所有元素合并,而是添加了另一个for循环,并迭代了varechem_二进制文件中的所有列。使用drop=FALSE保留行名称和结构,因此合并工作:

在迭代组合单个数据帧中的列与列表中的其他数据帧时,我遇到了一个(可能很小)问题。一些数据可以说明:

#加载示例数据
图书馆(素食主义者)
数据(varechem)
数据(varespec)
#生成具有重叠行和不同列数的预测表

varespec1根据Gregor的评论,我提出了类似的方法。我没有将完整的
varechem_二进制文件
subset_列表
的所有元素合并,而是添加了另一个for循环,并迭代了
varechem_二进制文件
中的所有列。使用
drop=FALSE
保留行名称和结构,因此合并工作:


merge\u col\u counter使用应用函数的另一种解决方案:

lapply(subset_list, function(x) apply(varechem_binary, 2, function(var) merge(var, x, by= 'row.names')))

使用system.time()使用示例数据对这两种方法进行基准测试,这种方法的速度(0.075用户时间)是使用for循环的解决方案(0.143用户时间)的两倍。

啊,对不起,这只是示例代码中的一个问题,在我的原始数据中,合并的_列表运行良好。我将更新代码并更好地解释我的预期输出是什么,将所有这些数据帧保存在列表中似乎效率低下。。。看起来你可能更容易制作一个包含所有响应的大数据帧(或者可能是3个包含所有响应的大数据帧),并为
ranger
提供不同的数据子集/不同的公式,因此,基本上使用
merged_list[[1]]
并给出ranger
data=merged_list[[1]],c(1:44,i+44)
,让
i
根据响应数量的不同而有所不同。同样地,构造公式以确保LHS是正确的。我只是觉得没有必要将它们全部命名为
aa
bb
,…并将它们分别保存为单独的副本。@Gregor:数据帧来自许多不同的对象,但我可以想办法将它们命名为c合并它们。但是,我必须更改row.names,因为在我的实际数据中,它们在子集之间重叠。如果预测变量的数量始终相同,则遍历列的方式看起来很好。在我的实际数据中,它们会更改,我还希望通过按名称寻址使它们更可读。我将调整示例data对于这个,很抱歉,我甚至没有考虑这个暗示
lapply(subset_list, function(x) apply(varechem_binary, 2, function(var) merge(var, x, by= 'row.names')))