如何基于另一个数据集中的重复值重新编码值

时间:2019-11-25 02:27:30

标签: r recode

我正在处理以下数据。我们可以称之为x

   New_Name_List               Old_Name_List
1     bumiputera        bumiputera (muslims)
2     bumiputera          bumiputera (other)
3 non bumiputera non bumiputera (indigenous)
4        chinese                     chinese

目标是在另一个看起来像这样的数据对象中重新编码数据。我们可以称之为y

  EPR_country_code EPR_country           EPR_group_lower_2
1              835      Brunei        bumiputera (muslims)
2              835      Brunei          bumiputera (other)
3              835      Brunei non bumiputera (indigenous)
4              835      Brunei                     chinese 

如果x$New_Name_List有重复的值,我希望在新列x$Old_Name_List中输入y$EPR_group_lower_3的值。

如果x$New_Name_List具有唯一值,我希望在新列x$New_Name_List中使用y$EPR_group_lower_3

这样数据的结尾将是这样:

  EPR_country_code EPR_country           EPR_group_lower_2  EPR_group_lower_3
1              835      Brunei        bumiputera (muslims)  bumiputera (muslims)
2              835      Brunei          bumiputera (other)  bumiputera (other)
3              835      Brunei non bumiputera (indigenous)  non bumiputera
4              835      Brunei                     chinese  chinese

非常感谢您

1 个答案:

答案 0 :(得分:1)

我们可以使用get()并根据ifelse中的重复值从Old_Name_ListNew_Name_List中选择值。

New_Name_List

或者找到重复值的索引,然后仅替换这些索引。

y$EPR_group_lower_3 <- with(x, ifelse(duplicated(New_Name_List) | 
        duplicated(New_Name_List, fromLast = TRUE), Old_Name_List, New_Name_List))
y

#  EPR_country_code EPR_country           EPR_group_lower_2    EPR_group_lower_3
#1              835      Brunei        bumiputera (muslims) bumiputera (muslims)
#2              835      Brunei          bumiputera (other)   bumiputera (other)
#3              835      Brunei non bumiputera (indigenous)       non bumiputera
#4              835      Brunei                     chinese              chinese

数据

y$EPR_group_lower_3 <- x$New_Name_List
inds <- with(x, duplicated(New_Name_List) | duplicated(New_Name_List, fromLast = TRUE))
y$EPR_group_lower_3[inds] <- x$Old_Name_List[inds]