rbind使用不同的名称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,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)
}