簡體   English   中英

根據R中列表的名稱重命名數據框的列

[英]Rename Columns of dataframe based on names of list in R

我有多個數據幀保存在列表對象中。 它們共享相同的兩個列名。 我想將第二列重命名為數據幀的名稱。

示例數據:

df1 <- data.frame(A = 1:10, B= 11:20)
df2 <- data.frame(A = 21:30, B = 31:40) 
df3 <- data.frame(A = 31:40, B= 41:50)
df4 <- data.frame(A = 51:80, B = 61:70) 

listDF <- list(df1, df2,df3, df4)

我正在嘗試使用lapply重命名第二列以匹配數據幀的名稱。

# trying to rename second column after the element of the list they're located in
listDF_2 <- lapply(names(listDF), function(x) setNames(listDF[[x]], x) )

在這種情況下,您可能希望使用dplyr::bind_rows 它簡化了將data.frames的名稱用作組合數據框中的新列。

# Create list as.
listDF <- list(df1 = df1, df2 = df2,df3 = df3, df4 = df4)

library(dplyr)

# Now combine all data frames. The name of data frame will be in 'DF_Name' column
bind_rows(listDF, .id = "DF_Name")

#    DF_Name  A  B
# 1      df1  1 11
# 2      df1  2 12
# 3      df1  3 13
# 4      df1  4 14
# 5      df1  5 15
# 6      df1  6 16
# 7      df1  7 17
# 8      df1  8 18
# 9      df1  9 19
# 10     df1 10 20
# 11     df2 21 31
# 12     df2 22 32
# 13     df2 23 33
#.................
#.................
# 58     df4 78 68
# 59     df4 79 69
# 60     df4 80 70

注意:正如@Moody_Mudskippe指出的那樣,人們可以簡單地使用

listDF <- lst(df1, df2, df3, df4)

然后使用dplyr::bind_rows

要跟蹤名稱,您可以使用:

listDF <- list(df1 = df1, df2 = df2, df3  = df3, df4 = df4)

然后你可以使用for循環:

for (i in names(listDF)){
  colnames(listDF[[i]]) <- c("A", i)
}

或者如果你需要使用lapply,你可以使用:

newDF <- lapply(names(listDF), function(x){
  colnames(listDF[[x]]) <- c("A", x)
  listDF[[x]]
})
names(newDF) <- names(listDF) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM