我有三个具有不同列名的数据帧:
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的功能,那就更好了。
发布于 2020-10-19 11:53:44
您可以使用from和to的信息创建数据帧,并使用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
#....https://stackoverflow.com/questions/64420806
复制相似问题