R重命名相邻列

时间:2018-11-29 14:13:57

标签: r rename

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

具有合并单元格的excel工作表中的R数据框

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

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

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

1 个答案:

答案 0 :(得分:0)

此解决方案通过对数据帧的名称使用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