list - rbind 具有不同列名的多个 csv 文件 R
问题描述
我有一个包含 107 个 csv 文件(3560 行 x 13 列)的列表,我想将它们组合在一个长数据框中final_df
。它们共享相同的结构,但最后三列在每个文件中的标记不同。
A = c("one", "two", "three","four","five")
B = c(1, 2, 3, 4, 5)
C = c(34,11,3,45,65)
D = c(7,1,88,95,13)
J_1 = c(23,6,8,15,54)
J_2 = c(2,54,69,95,45)
J_3 = c(9,10,11,5,14)
W_1 = c(23,6,8,15,54)
W_2 = c(2,54,69,95,45)
W_3 = c(9,10,11,5,14)
file_1 <- data.frame(A,B,C,D,J_1,J_2,J_3)
file_2 <- data.frame(A,B,C,D,W_1,W_2,W_3)
我尝试将它们列出并通过 for 循环传递它们,在该循环中我可以使用固定向量(colnames)更改行名,以便具有相同的列名并能够使用函数 rbind,但没有运气。
colnames = c("A", "B", "C", "D", "X_1", "X_2", "X_3")
names(i) <- colnames
此外,我想添加一个额外的列来final_df$filename
存储文件名(可能没有路径和 .csv),以免丢失有关数据来源的信息。
我的预期结果理想情况下是这样的:
A B C D X_1 X_2 X_3 filename
1 one 1 34 7 23 2 9 file_1
2 two 2 11 1 6 54 10 file_1
3 three 3 3 88 8 69 11 file_1
4 four 4 45 95 15 95 5 file_1
5 five 5 65 13 54 45 14 file_1
6 one 1 34 7 23 2 9 file_2
7 two 2 11 1 6 54 10 file_2
8 three 3 3 88 8 69 11 file_2
9 four 4 45 95 15 95 5 file_2
10 five 5 65 13 54 45 14 file_2
在此先感谢您的帮助!
解决方案
我使用下面的代码进行了管理,即使我必须将 .csv 保留在文件名中。
解决方案:
list_of_files <- list.files(path, pattern = "\\.csv$", all.files=FALSE,full.names =TRUE)
final_df <- c()
columnnames <- colnames = c("A", "B", "C", "D", "X_1", "X_2", "X_3")
for(i in 1:length(list_of_files)){
file <- list_of_files[i]
var <- read.csv(file)
names(var) <- columnnames
var$filename <-paste(sapply(strsplit(as.character(list_of_files[i]),'_'), "[", 13))
final_df <- rbind(final_df,var)
}
推荐阅读
- r - 在 as.POSIXct 中更改时区
- c++ - Maybe 和 Either 单子、短路和性能
- python - AttributeError:“int”对象没有属性“to_dict”
- arkit - generateCollisionShapes() 似乎不起作用
- c++ - 无论我运行同一个应用程序多少次,应用程序(.exe)中的函数都应该只调用一次
- linux - 将字符串添加到 awk 命令的末尾
- c++ - 函数返回错误的结果。查找 n 阶乘的最后一个非零数字
- python - SQL Alchemy & Docker Compose:最大递归错误
- c# - C#过滤来自restclient的json结果
- scalatest - 套装似乎没有执行嵌套套装