如何在 R 中使用 alias/synonym 字典重命名列名?
How to rename column names by using an alias/synonym dictionary in R?
我在这个很棒的网站上阅读了很多东西,但这实际上是我的第一个问题。所以请耐心等待!
我是一名博士生,研究来自不同科学家的生态学数据(不同地区的物种丰度数据)。我想改进我的数据管理并停止手动编辑我的原始数据,而是使用脚本进行所有更改。物种的分类可能是一团糟,意思是:同一物种的不同同义词或别名。此外,由于我使用来自不同科学家的数据,我必须处理不同的物种缩写、不同的列顺序以及拼写错误。你说出来。我现在想知道是否有使用 alias/synonym 字典重命名我的列名的好方法。我花了几个小时研究,但找不到真正适合我问题的答案。
这是我的数据的一个小例子:
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 是我的实际原始数据 sheet,具有不同物种的深度值和丰度。
> 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
我现在想通过在词典。然而,由于我还在学习 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
我在这个很棒的网站上阅读了很多东西,但这实际上是我的第一个问题。所以请耐心等待!
我是一名博士生,研究来自不同科学家的生态学数据(不同地区的物种丰度数据)。我想改进我的数据管理并停止手动编辑我的原始数据,而是使用脚本进行所有更改。物种的分类可能是一团糟,意思是:同一物种的不同同义词或别名。此外,由于我使用来自不同科学家的数据,我必须处理不同的物种缩写、不同的列顺序以及拼写错误。你说出来。我现在想知道是否有使用 alias/synonym 字典重命名我的列名的好方法。我花了几个小时研究,但找不到真正适合我问题的答案。
这是我的数据的一个小例子:
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 是我的实际原始数据 sheet,具有不同物种的深度值和丰度。
> 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
我现在想通过在词典。然而,由于我还在学习 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