我有150个数据帧,我想要提取名为' egn'从每个数据帧中创建一个包含50列的新数据帧(列' egn'来自每个数据帧)。列数在20到25之间变化,行数在11000到13000之间变化。
每个数据帧都命名为:a1,a2,a3,...,a50。 每个数据框中的列具有相同的名称,我希望提取名为egn的所有列。
这是我写的R代码:
newdataframe = 0
for(i in 1:45) {
txt = paste0("a.", i, "$egn")
newdataframe= cbind(egn, eval(parse(text = txt)))
}
我在代码中的不同列上尝试了此代码,每列产生不同的结果,范围从仅包含3列的数据帧,包含46列的数据帧和包含1列的数据帧。 任何帮助将不胜感激。
注意,我认为问题出现在我使用cbind上。我一直在研究函数aggregate()和merge()。
由于
答案 0 :(得分:1)
在list
(mget(paste0("a", 1:50))
)中获取数据集,并从每个数据集中提取“egn”列,将其转换为data.frame
data.frame(lapply(mget(paste0("a", 1:50)), `[`, "egn"))
如果每个数据集中的行数不相同,请使用cbind.fill
中的rowr
library(rowr)
do.call(cbind.fill, c(lapply(mget(paste0("a", 1:50)), `[`, "egn"), fill = NA))
for(i in seq_len(50)) assign(paste0("a", i),
value = as.data.frame(matrix(rnorm(50*5), ncol = 50,
dimnames = list(NULL, sample(c(paste0("V", 1:49), "egn"))))))