问题描述
我有一个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,45,65)
D = c(7,1,88,95,13)
J_1 = c(23,6,8,15,54)
J_2 = c(2,54,69,45)
J_3 = c(9,10,5,14)
W_1 = c(23,54)
W_2 = c(2,45)
W_3 = c(9,14)
file_1 <- data.frame(A,B,C,D,J_1,J_2,J_3)
file_2 <- data.frame(A,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)
}