【问题标题】:Using lapply to change column names of list of dataframes with different column names使用 lapply 更改具有不同列名的数据框列表的列名
【发布时间】:2020-10-19 03:33:03
【问题描述】:

我有三个具有不同列名的数据框:

df1 <- data.frame(A = 1:10, B = 10:19)
df2 <- data.frame(D = 20:29, E = 30:39)
df3 <- data.frame(G = 40:49, H = 50:59)

它们在一个列表中:

my_list <- list(df1, df2, df3)

我需要更改列名(即 A 变为 A1,B 变为 B2,D 变为 D2,等等......)。不,这不像在所有列名上附加 2 那样容易。我的真实情况将涉及独特的变化(即 A 变为“物种”,B 变为“丰富”等)

当列表中的数据框都具有相同的列名 (Using lapply to change column names of a list of data frames) 时,如何执行此操作有很好的答案。

不过,我的数据框有不同的名称。最好使用类似于mapvalues 的功能。

【问题讨论】:

  • 那么您是否将大小为 6 的向量存储在某个位置以附加到现有的列名中?要附加的旧名称和新名称如何映射?它是基于列的位置还是名称?
  • @RonakShah 我希望能够根据名称映射更改,类似于mapvalues 的工作方式:mapvalues(df$column, from = c("A", "B", "D", "E", "G", "H"), to = c("A2", "B2", "D2", "E2", "G2", "H2"))。但是,当然,我需要使用 lapply 更改列名,这与此处的示例不同,这里的值只是在列中更改。
  • 它们必须按名称映射并且也可以这样做:mapvalues(df$column, from = c("A", "B", "D", "E", "G", "H"), to = c("this", "that", "he", "she", "him", "her"))

标签: r dataframe lapply


【解决方案1】:

您可以使用fromto 的信息创建一个数据框,并使用lapply 使用setNames 来匹配和替换列名:

lookup_names <- data.frame(from = c("A", "B", "D", "E", "G", "H"), 
                           to = c("this", "that", "he", "she", "him", "her"))

lookup_names
#  from   to
#1    A this
#2    B that
#3    D   he
#4    E  she
#5    G  him
#6    H  her

lapply(my_list, function(x) 
        setNames(x, lookup_names$to[match(names(x), lookup_names$from)]))

#[[1]]
#   this that
#1     1   10
#2     2   11
#3     3   12
#4     4   13
#...
#...

#[[2]]
#   he she
#1  20  30
#2  21  31
#3  22  32
#4  23  33
#5  24  34
#....

【讨论】:

    猜你喜欢
    • 2016-02-07
    • 2017-08-14
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多