我正在合并来自不同来源的多个数据集。每个数据集中的列名称(如datframe)具有不同的名称,并且顺序不同。我创建了一个字典,其中包含所有不同的名称和我想用来重命名原始名称的通用名称。如何使用R中的字典重命名原始列名?我特别想使用字典,因为将来我可能会添加更多数据集(具有不同的列名),并且很容易适应字典。
我知道我可以手动重命名每列,但是有很多列(例如30列),它们可能会随着新数据集的添加而改变。
df1 <- data.frame(site = c(1:6), code = c(rep("A",3), rep("B", 3)), result = c(20:25))
df2 <- data.frame(site_no = c(10:19), day = c(1:10), test = c(rep("A", 5), rep("B", 5)), value = c(1:10))
dict <- data.frame(oldName = c("site", "code", "result", "site_no", "day", "test", "value"), newName = c("site_number", "parameter", "result", "site_number", "day", "parameter", "result"))
我想根据dict数据帧重命名df1和df2中的列,该数据帧包含旧名称(df1和df2中的所有列名称)和新名称(要使用的通用名称)。
结果将是:
colnames(df1)
"site_number" "parameter" "result"
colnames(df2)
"site_number" "day" "parameter" "result"
答案 0 :(得分:2)
我们可以match
的名称df
到旧名称,然后在匹配的索引处提取新名称:
names(df1) = with(dict,newName[match(names(df1),oldName)])
names(df2) = with(dict,newName[match(names(df2),oldName)])
print(df1)
print(df2)
答案 1 :(得分:1)
将数据集放入rename_all
后,我们可以使用list
。最好将这些数据集放在list
中,而不是将它们放在全局环境中
library(dplyr)
library(purrr)
out <- mget(ls(pattern = "^df\\d+$")) %>%
map(~ .x %>%
rename_all(~ as.character(dict$newName)[match(., dict$oldName)]))
如果需要,我们可以使用list2env
list2env(out, .GlobalEnv)
names(df1)
#[1] "site_number" "parameter" "result"
names(df2)
#[1] "site_number" "day" "parameter" "result"