首页 > 解决方案 > R:创建由单独文件中的现有列组成的数据框

问题描述

我不得不为不同的数据子集导出 70 多个相同的报告。它们都具有相同的文件名,例如“Campus X Item Analysis.csv”,其中 X 是每个校区的名称。

我需要创建一个数据框,其中列是每个文件的第 8 列,并且列的标题是子集的名称。这必须来自文件名,因为由于某种原因,报告在任何地方都没有包含子集的名称。

这是我第一次提出问题,所以提前感谢,如果您需要了解其他信息,请告诉我。

我会尽量具体说明我拥有/需要什么。
我有一个文件列表:

Campus 1 Item Analysis.csv
Campus 2 Item Analysis.csv
Campus 3 Item... and so on

每个文件都有相同格式的数据。

Campus 1 Item Analysis.csv:
 1     2     3     4     5     6     7     8    9...
[A1]  [B1]  [C1]  [D1]  [E1]  [F1]  [G1]  [H1]  [I1]
[A2]  [B2]  [C2]  [D2]  [E2]  [F2]  [G2]  [H2]  [I2]

我希望将每个文件的第 8 列聚合到一个数据框中,最好用校园标记。

Campus 1     Campus 2     Campus 3...
[H1]         [H1]         [H1]
[H2]         [H2]         [H2]
[H3... and so on

标签: r

解决方案


如果没有太多信息需要处理,我会推荐list.files()并循环浏览它们。

files <- list.files()

for(i in 1:length(files)){
f<-read.csv(files[i])
assign(files[i], f)}

tmp <- mget(ls())

dat <- c()
dat_name <- c()
for(i in 1:length(tmp)){
dat <- c(dat, tmp[[i]][,8])
dat_name <- c(dat_name, rep(names(tmp)[i], nrow(tmp[[i]])))
}

如果您使用而不是我的循环,您可以加快速度lapply,但不确定我的解决方案是否正是您所追求的。它应该读入 中的所有文件getwd(),如果该目录中有您不想要的文件,请使用 的pattern参数list.files,类似于mget将所有对象分组到一个列表中。如果您的 R 环境中有其他对象,请pattern使用ls().

读入文件循环应该将数据帧重命名为文件名,我假设这些名称将传递给 tmp 列表的名称。然后,我制作了两个向量(您可以将其编译为 df),一个包含所有文件第 8 列的数据,一个包含它们来自的列表的名称,它们应该是相等的长度。如果您希望每个文件的第八列位于一个易于使用的 df 的单独列中,rbind请在第二个循环中使用。

这显然是未经测试的,可能包含错误,所以运行它并让我知道。


推荐阅读