【问题标题】:R rename adjacent columnR重命名相邻列
【发布时间】:2019-05-01 15:09:15
【问题描述】:

当 excel 合并单元格时,导入数据会为后续列提供通用列名,如下图所示。

带有合并单元格的 Excel 工作表中的 R 数据框

那么是否可以将列名复制到其右侧的列中? 在此示例中,它将复制“二氧化硫结果”以覆盖 X_6 和 X_7,并将“乙醇结果”复制到 X_8 和 X_9 等。

所有感兴趣的列名都以“结果”结尾,所以我正在考虑是否可以根据名称中的“结果”选择列并将名称复制到其右侧的 2 列。

还有更多列,但它们具有相同的模式,列的数量和名称可能会发生变化,但名称中仍会出现“结果”。

【问题讨论】:

标签: r rename


【解决方案1】:

此解决方案通过对数据框的名称使用sapply 来工作。然后,对于每个列名,它会检查前一或两个位置的列名是否以results 结尾。如果是这样,那么它会从之前的一两个位置复制之前的名称。

df <- data.frame(one_results=c(1:3), blah=c(4:6), star=c(7:9), col=c(1:3))
df

names(df) <- sapply(seq_along(names(df)), function(x) {
    if (x > 1 && grepl("results$", names(df)[x-1])) {
        return(names(df)[x-1])
    }
    else if (x > 2 && grepl("results$", names(df)[x-2])) {
        return(names(df)[x-2])
    }
    else {
        return(names(df)[x])    # do not alter the column name in this case
    }
})

df

输出:

  one_results blah star col
1           1    4    7   1
2           2    5    8   2
3           3    6    9   3

  one_results one_results one_results col
1           1           4           7   1
2           2           5           8   2
3           3           6           9   3

【讨论】:

  • 谢谢!这正是我想要的。非常感谢您的帮助
猜你喜欢
  • 2021-01-23
  • 1970-01-01
  • 2022-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
相关资源
最近更新 更多