【发布时间】:2022-01-09 11:19:47
【问题描述】:
我有多个相同格式的 csv 文件需要合并,但在此之前
- 标题不是第一行而是第四行。我应该通过跳过删除前 3 行吗?还是我应该重新分配标题?
- 我需要在合并之前添加一列,该列是文件的 ID(与文件名相同)。
- 那么我只需要从总共 7 列中提取 4 列。
- 总结一个类别下的数字。
- 将所有 csv 文件合并为一个。
这就是我目前所做的第 1、3、4 步,然后只添加 2 个列然后 5 个,不确定我是否应该先在 ID 列中添加?
files = list.files(pattern = "*.csv", full.names = TRUE)
library("tidyverse")
library("dplyr")
data = data.frame()
for (file in files){
temp <- read.csv(file, skip=3, header = TRUE)
colnames(temp) <- c("Volume", "Unit", "Category", "Surpass Object", "Time", "ID")
temp <- temp [, c("Volume", "Category", "Surpass Object")]
temp <- subset(temp, Category =="Surface")
mutate(id = file)
aggregate(temp$Volume, by=list(Category=temp$Category), FUN=sum)
}
我得到了一个错误:
Error in is.data.frame(.data) :
argument ".data" is missing, with no default
如果我没有放入 mutate 行,代码很好,所以我认为主要问题来自那里,但任何建议都将不胜感激。
我对 R 很陌生,非常感谢我能在这里找到的所有 cmets。
提前致谢!
【问题讨论】:
-
您肯定错过了在
mutate中调用数据框。如果您尝试在temp上执行此操作,则需要在管道中添加。temp <- subset(temp, Category =="Surface") %>% mutate(id = file) -
你也在做所有这些计算,然后丢弃结果,永远不会捕获到一个持续存在的对象中。请参阅stackoverflow.com/a/24376207/3358227 以了解有关对帧列表进行操作的良好讨论,即执行诸如读取多个文件和处理列表中的数据集之类的操作。在本例中,我们不需要将它们分开(但如果您愿意,绝对可以),但该页面上的前提和其他指导仍然适用。
-
@AndrewGillreath-Brown 感谢您的评论。我尝试了代码,由于某种原因,id 列中只显示了一个文件名,不确定其他文件名是否被相同的文件名替换?