设置场景:
所以我有一个目录,里面有 50 个 .csv 文件。
所有文件都有唯一的名称,例如 1.csv 2.csv ...
每个内容的行数可能不同,但总是有 4 列
列标题是:
- 日期
- 结果 1
- 结果 2
- ID
我希望将它们全部合并到一个数据框(mydf)中,然后我想忽略任何有 NA 值的行。
这样我就可以计算出有多少个完整的“ID”实例。例如通过调用;
- 我的函数(“我的文件”,1)
- myfunc("my_files", c(2,4,6))
到目前为止我的代码:
myfunc <- function(directory, id = 1:50) {
files_list <- list.files(directory, full.names=T)
mydf <- data.frame()
for (i in 1:50) {
mydf <- rbind(mydf, read.csv(files_list[i]))
}
mydf_subset <- mydf[which(mydf[, "ID"] %in% id),]
mydf_subna <- na.omit(mydf_subset)
table(mydf_subna$ID)
}
我的问题和需要帮助的地方:
我的结果是这样出来的
2 4 6
200 400 600
我想把它们变成这样。我不确定调用表格是否正确,或者我应该将其称为 as.matrix 吗?
2 100
4 400
8 600
我还想拥有原始文件的标题或分配新的标题
ID Count
2 100
4 400
8 600
欢迎任何和所有的建议
马特
附加更新
我尝试修改以合并下面的一些有用的评论,所以我也有一组看起来像这样的代码;
myfunc <- function(directory, id = 1:50) {
files_list <- list.files(directory, full.names=T)
mydf <- data.frame()
for (i in 1:50) {
mydf <- rbind(mydf, read.csv(files_list[i]))
}
mydf_subset <- mydf[which(mydf[, "ID"] %in% id),]
mydf_subna <- na.omit(mydf_subset)
result <- data.frame(mydf_subna$ID)
transposed_result <- t(result)
colnames(transposed_result) <- c("ID","Count")
}
我试着用这个来称呼:
myfunc("myfiles", 1)
myfunc("myfiles", c(2, 4, 6))
但我得到这个错误
> myfunc("myfiles", c(2, 4, 6))
Error in `colnames<-`(`*tmp*`, value = c("ID", "Count")) :
length of 'dimnames' [2] not equal to array extent
我想知道我是否没有正确创建这个 data.frame 并且应该使用 cbind 或者不按 ID 对行求和?