【问题标题】:Replace certain colnames in a list of data frames替换数据框列表中的某些列名
【发布时间】:2021-01-03 09:26:46
【问题描述】:

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

所以出发点如下:

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 中导入了几个数据框到一个列表中,其中列名跨越两列。导入数据时,我无法将两列标记为相同的列名。

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

【问题讨论】:

  • 有时在导入数据之前在 Excel 中进行预处理是值得的。

标签: r list rename columnname


【解决方案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

【讨论】:

  • 成功了!谢谢!并且没有重复名称的问题。
猜你喜欢
  • 2023-01-14
  • 2019-10-21
  • 2019-03-31
  • 2020-10-10
  • 1970-01-01
  • 2022-01-23
  • 2018-02-11
  • 1970-01-01
  • 2020-10-29
相关资源
最近更新 更多