替换数据框列表中的某些名称

时间:2020-09-16 14:09:58

标签: r list rename columnname

我有一个数据帧列表,我想将以“ ...”开头的列名替换为之前的列名。

所以起点如下:

df1 <- data.frame(Tree=c(1:3), Sea=c(4:6), ...3=c(2:4), Beach=c(1:3), ...5=c(2:4))
df1

df2 <- data.frame(Tree=c(1:3), Sea=c(4:6), ...3=c(2:4), Beach=c(1:3), ...5=c(2:4))
df2

df3 <- data.frame(Tree=c(1:3), Sea=c(4:6), ...3=c(2:4), Beach=c(1:3), ...5=c(2:4))
df3

df.list<-list(df1, df2, df3)

我希望列表中数据框中的列如下所示:

df1 <- data.frame(Tree=c(1:3), Sea=c(4:6), Sea=c(2:4), Beach=c(1:3), Beach=c(2:4))
df1

df2 <- data.frame(Tree=c(1:3), Sea=c(4:6), Sea=c(2:4), Beach=c(1:3), Beach=c(2:4))
df2

df3 <- data.frame(Tree=c(1:3), Sea=c(4:6), Sea=c(2:4), Beach=c(1:3), Beach=c(2:4))
df3

最初出现问题是因为我从Excel导入了一个列表中的几个数据框,该列表中的列名范围跨越两列。导入数据时,我无法用相同的列名标记两个列。

非常感谢您的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

我建议采用下一种方法。您可以使用函数和lapply()来设置所需的更改。在函数myname()中定义了一种结构,用于检测名称中的模式,然后将其设置为NA。之后,我们将使用zoo函数na.locf()来完成具有先前值的名称。另外,有时R在数据框中存在重复名称的问题,这就是为什么我在注释中留下了可以避免这种情况的行,并且如果需要唯一名称,则应在该注释的下一行进行注释。这里的代码:

library(zoo)
#Data
df1 <- data.frame(Tree=c(1:3), Sea=c(4:6), ...3=c(2:4), Beach=c(1:3), ...5=c(2:4))
df2 <- data.frame(Tree=c(1:3), Sea=c(4:6), ...3=c(2:4), Beach=c(1:3), ...5=c(2:4))
df3 <- data.frame(Tree=c(1:3), Sea=c(4:6), ...3=c(2:4), Beach=c(1:3), ...5=c(2:4))
df.list<-list(df1, df2, df3)
#Remove names
myname <- function(x)
{
  #Names of df
  v1 <- names(x)
  #Detect points
  index <- which(grepl('..',v1,fixed=T))
  v1[index]<-NA
  #Fill
  # v1 <- make.unique(na.locf(v1))
  v1 <- na.locf(v1)
  #Remove
  names(x) <- v1
  #Return
  return(x)
}
#Apply
df.list2 <- lapply(df.list,myname)

输出:

df.list2
[[1]]
  Tree Sea Sea Beach Beach
1    1   4   2     1     2
2    2   5   3     2     3
3    3   6   4     3     4

[[2]]
  Tree Sea Sea Beach Beach
1    1   4   2     1     2
2    2   5   3     2     3
3    3   6   4     3     4

[[3]]
  Tree Sea Sea Beach Beach
1    1   4   2     1     2
2    2   5   3     2     3
3    3   6   4     3     4