当excel合并单元格后,导入数据将为后续列提供通用列名,如下图所示。
具有合并单元格的excel工作表中的R数据框
那么是否可以将列名复制到右边的列? 在此示例中,它将复制“二氧化硫结果”以覆盖X_6和X_7,将“乙醇结果”覆盖到X_8和X_9等。
所有感兴趣的列名都以“结果”结尾,因此我正在考虑是否可以根据名称中的“结果”选择列,并将名称复制到其右侧的2列中。
还有更多的列,但是它们具有相同的模式,列的数量和名称可能会发生变化,但是“结果”仍将出现在名称中。
答案 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