合并数据框或匹配列以获取新列

时间:2019-05-02 14:00:03

标签: r dataframe merge match

我想合并两个数据框。因此,Type中的列Data出现在Values中。

DATA

Name                Type            Code
gabapentine         Pharmaceutical  60142-96-3
Glyphosate          Pesticide       1071-83-6
Guanylurea          Pharmaceutical  141-83-3
hydrochlorthiazide  Pharmaceutical  58-93-5
EDTA                Industrial C.   NA

Values

Name                Value           Code
gabapentine         0,2             60142-96-3
Glyphosate          1,8             1071-83-6
Urea                1,2             141-83-3
hydrochlorthiazide  0,5             58-93-5
EDTA                2,3             NA

我想要这个

Name                Value           Code        Type
gabapentine         0,2             60142-96-3  Pharmaceutical
Glyphosate          1,8             1071-83-6   Pesticide
Guanylurea                1,2             141-83-3    Pharmaceutical
hydrochlorthiazide  0,5             58-93-5     Pharmaceutical
EDTA                2,3             NA          Industrial C. 

我用merge尝试了this question的选项

但是我明白了

Name                Value           Code        Type
gabapentine         0,2             60142-96-3  Pharmaceutical
Glyphosate          1,8             1071-83-6   Pesticide
Urea                1,2             141-83-3    NA
hydrochlorthiazide  0,5             58-93-5     Pharmaceutical
EDTA                2,3             NA          Industrial C. 

是否可以在合并函数中使用OR |运算符?还是在匹配功能中?原因是我想匹配Names,如果不匹配(例如鸟粪和尿素),请查看Codes,最后添加Type列。

可能是这样的

Values$type = Data$type[match((Values$Name, Data$Name) | (Values$Code, Data$Code))]

或类似的

merge(Data, Values, by=c("Name" | "Code"))) 

2 个答案:

答案 0 :(得分:1)

使用dplyr,您可以尝试:

df <- full_join(DATA,Values,by=c("Name","Code"))

然后您删除值列,特别是value.y

答案 1 :(得分:0)

请考虑在rbind后面加上merge的{​​{1}}以删除重复项:

unique