r - 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
解决方案
如果没有太多信息需要处理,我会推荐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
请在第二个循环中使用。
这显然是未经测试的,可能包含错误,所以运行它并让我知道。
推荐阅读
- docker - docker load 设备 RHEL 上没有剩余空间
- facebook - Facebook - 卷曲错误 SSL_CACERT SSL 证书
- python - 分类成绩数据(A+、B-等)转换为数值
- r - 如果数据是字符或因子类型,如何获取 R 中的每一行?
- symfony - 如何在没有 Doctrine / ORM 的情况下使用 Symfony 4.1 安全/身份验证提供程序
- reactjs - 为什么较新的“setState”方法无法识别我的 event.target?
- ffmpeg - 是否可以使用管道发送 ffmpeg 图像?
- sendmail - 创建用于登录 CENTOS LINUX 的 sendmail/dovecot 电子邮件别名用户名
- amazon-web-services - ajax 请求在 AWS EC2 服务器上不起作用
- virtualbox - 在没有 GUI 或访客添加的情况下构建 VirtualBox