gpt4 book ai didi

r - 如何在R中相应的查询表中用字符串替换data.frame列名

转载 作者:行者123 更新时间:2023-12-03 16:07:52 25 4
gpt4 key购买 nike

我有以下data.frame:

set.seed(126)
df <- data.frame(a=sample(c(1:100, NA), 10), b=sample(1:100, 10), c=sample(1:100, 10), d = c(1:10))
a b c d
1 18 27 53 1
2 44 16 66 2
3 58 47 3 3
...

和下面的查询表:
varnames <- data.frame(old = c("a", "b", "c"), new = c("dog", "cat", "mouse"))
old new
1 a dog
2 b cat
3 c mouse

我想做的是用相应的 names(df)替换 varnames$new ...如果 names(df)中没有 varnames$old,则将名称保留在df中...

我想返回的结果data.frame看起来像这样:
   dog cat mouse  d
1 57 10 83 1
2 53 99 94 2
3 99 60 39 3
...

任何和所有帮助表示赞赏。

最佳答案

如何使用match()函数

mm <- match(names(df), varnames$old)
names(df)[!is.na(mm)] <- as.character(varnames$new[na.omit(mm)])
head(df)
# dog cat mouse d
# 1 65 48 19 1
# 2 46 15 80 2
# 3 NA 47 84 3
# 4 68 34 46 4
# 5 23 75 42 5
# 6 92 87 68 6

如果您有兴趣,也可以使用 dplyr rename()函数
library(dplyr)
df %>% rename_(.dots=with(varnames, setNames(as.list(as.character(old)), new)))

或另外一个选项, data.table包具有 setnames函数
library(data.table)
setnames(df, as.character(varnames$old), as.character(varnames$new))

关于r - 如何在R中相应的查询表中用字符串替换data.frame列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30654065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com