首页 > 解决方案 > R重命名列(hlookup)

问题描述

我有以下数据

data <- data.frame(c=1:5, ID=0,a=2,b=5:9)
naming <- data.frame(short=c("a","b","c", "d", "e"), long=c("aa","bb","cc", "dd", "ee"))

我想将数据框中的列重data命名c,ID,b,acc,ID,bb,aa

我试过了:

colnames(data) <- naming[match(naming$short, colnames(data)),2]

但这不起作用,因为两个向量的长度不同,此外,我想将列名保留在 中data,而不是在naming.

有什么建议么?基本上它的hlookup功能来自 Excel,但由于数据文件很大,我无法在 Excel 中执行此操作。

标签: r

解决方案


基数 R:

matches <- match(names(data), naming$short)
matches
# [1]  3 NA  1  2
ifelse(is.na(matches), names(data), naming$long[matches])
# [1] "cc" "ID" "aa" "bb"
names(data) <- ifelse(is.na(matches), names(data), naming$long[matches])
data
#   cc ID aa bb
# 1  1  0  2  5
# 2  2  0  2  6
# 3  3  0  2  7
# 4  4  0  2  8
# 5  5  0  2  9

推荐阅读