簡體   English   中英

如何使用 R 中的別名/同義詞字典重命名列名?

[英]How to rename column names by using an alias/synonym dictionary in R?

我在這個很棒的網站上閱讀了很多,但這實際上是我的第一個問題。 所以忍耐一下吧!

我是一名博士生,研究來自不同科學家的生態數據(不同地區的物種豐度數據)。 我想改進我的數據管理並停止手動編輯我的原始數據,而是使用腳本進行所有更改。 物種的分類可能是一團糟,意思是:同一物種的不同同義詞或別名。 此外,由於我使用來自不同科學家的數據,我必須處理不同的物種縮寫、不同的列順序以及拼寫錯誤。 你說出它的名字。 我現在想知道是否有使用別名/同義詞字典重命名我的列名的好方法。 我花了幾個小時研究,但找不到真正適合我的問題的答案。

這是我的數據的一個小例子:

df1 <- tibble(depth_cm = c(1.5:4.5), n_pachyderma_d = c(70.2:73.2), n_pachyderma_s = c(10.1:13.1), g_quinqueloba = c(2.4:5.4))
dict <- tibble(new_name = c("turborotalita_quinqueloba", "neogloboquadrina_incompta", "neogloboquadrina_pachyderma"),  alias1 = c("t_quinqueloba", "neogloboquadrina_pachyderma_dextral", "globigerina_pachyderma"), alias2 = c("g_quinqueloba", "n_pachyderma_d", "n_pachyderma_s"), alias3 = c(NA, "n_incompta", "n_pachyderma"))

df1是我的實際原始數據表,其中包含不同物種的深度值和豐度。

> df1
# A tibble: 4 x 4
  depth_cm n_pachyderma_d n_pachyderma_s g_quinqueloba
     <dbl>          <dbl>          <dbl>         <dbl>
1      1.5           70.2           10.1           2.4
2      2.5           71.2           11.1           3.4
3      3.5           72.2           12.1           4.4
4      4.5           73.2           13.1           5.4 

dict是我要使用的字典。 請注意,特定物種可能有不同數量的別名。 我想在遇到新別名時立即用新別名更新這本詞典。

> dict
# A tibble: 3 x 4
  new_name                    alias1                              alias2         alias3      
  <chr>                       <chr>                               <chr>          <chr>       
1 turborotalita_quinqueloba   t_quinqueloba                       g_quinqueloba  NA          
2 neogloboquadrina_incompta   neogloboquadrina_pachyderma_dextral n_pachyderma_d n_incompta  
3 neogloboquadrina_pachyderma globigerina_pachyderma              n_pachyderma_s n_pachyderma

我現在想通過在dict 中查找列名來使用new_name重命名df1的物種列名。 但是,由於我仍在學習 R,因此我不知道如何解決這個問題。 但基本上,我想用字典檢查每個列名,然后用正確的物種名稱重命名列。 有沒有一種聰明的方法呢? 我的主要目標是自動化不同數據集的導入和標准化。

我真的很期待每一個建議或幫助!

我們可以將“dict”重塑為“long”格式

library(dplyr)
library(tidyr)
new_dict <- dict %>%
      pivot_longer(cols = starts_with('alias')) %>%
      filter(value %in% names(df1)) %>% 
      select(-name)

並使用它來重命名“df1”中的列

df2 <- df1 %>% 
          rename_at(vars(new_dict$value), ~ new_dict$new_name)

df2
# A tibble: 4 x 4
#  depth_cm neogloboquadrina_incompta neogloboquadrina_pachyderma turborotalita_quinqueloba
#     <dbl>                     <dbl>                       <dbl>                     <dbl>
#1      1.5                      70.2                        10.1                       2.4
#2      2.5                      71.2                        11.1                       3.4
#3      3.5                      72.2                        12.1                       4.4
#4      4.5                      73.2                        13.1                       5.4

暫無
暫無

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

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