簡體   English   中英

如何根據 R 中的字典在多個數據框中重命名具有不同列名和不同順序的多個列

[英]How to rename multiple columns with different column names and different order in several dataframes based on a dictionary in R

我正在合並來自不同來源的多個數據集。 每個數據集的列名(作為 datframes)具有不同的名稱和不同的順序。 我創建了一個字典,其中包含所有不同的名稱和我想要重命名原始名稱的通用名稱。 如何使用 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"))

我想根據字典 dataframe 重命名 df1 和 df2 中的列,其中包含舊名稱(來自 df1 和 df2 的所有列名)和新名稱(要使用的常用名稱)。

結果將是:

colnames(df1)
"site_number" "parameter" "result"

colnames(df2)
"site_number" "day" "parameter" "result"

我們可以將各個df的名稱與舊名稱match ,然后在匹配的索引處提取新名稱:

names(df1) = with(dict,newName[match(names(df1),oldName)])
names(df2) = with(dict,newName[match(names(df2),oldName)])
print(df1)
print(df2)

我們可以在將數據集放入list后使用rename_all 最好將這些數據集放在list ,而不是將它們放在全局環境中

library(dplyr)
library(purrr)
out <- mget(ls(pattern = "^df\\d+$")) %>%
       map(~ .x %>% 
         rename_all(~  as.character(dict$newName)[match(., dict$oldName)]))

如果需要,我們可以使用list2env更改原始 object 中的列名

list2env(out, .GlobalEnv)
names(df1)
#[1] "site_number" "parameter"   "result"     

names(df2)
#[1] "site_number" "day"         "parameter"   "result"     

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM