r - 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,a
为cc,ID,bb,aa
我试过了:
colnames(data) <- naming[match(naming$short, colnames(data)),2]
但这不起作用,因为两个向量的长度不同,此外,我想将列名保留在 中data
,而不是在naming
.
有什么建议么?基本上它的hlookup
功能来自 Excel,但由于数据文件很大,我无法在 Excel 中执行此操作。
解决方案
基数 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
推荐阅读
- python - 如何在 django 中从 postgresql 删除表后使用迁移创建表?
- javascript - 无法将状态从减速器传递到“this.props”,在 React-Redux 上使用 axios 获取 API
- java - FragmentDirections 生成成功但无法解析符号
- android - “Null”类型不是“Function”类型的子类型
- linux - 我只能从终端调用一个函数而不是整个 bash 脚本吗?
- excel - 如何从现有数据创建下拉列表?
- javascript - 通过脚本根据字体更改 Anti-Aliase 值
- reactjs - 找不到模块“../Theme/Icons/”或其对应的类型声明.ts(2307)
- spring-batch - OpenCsv 函数将一行映射到一个 bean
- git - Git将连接克隆为普通文件夹