Объединить кадры данных или сопоставить столбцы для получения нового столбца - PullRequest
1 голос
/ 02 мая 2019

Я хочу объединить два фрейма данных.Поэтому столбец 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

Но я получаю

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, а если они не совпадают (как в случае с Guanylurea и Urea), то посмотрите в Codes и, наконец, добавьте столбец Type.

Возможно что-то вроде этого

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

или вот так

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

Ответы [ 2 ]

1 голос
/ 02 мая 2019

С помощью dplyr вы можете попробовать:

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

затем вы стираете столбец значений, в частности, value.y

0 голосов
/ 02 мая 2019

Рассмотрим rbind с merge, за которым следует unique для удаления дубликатов:

unique(rbind(merge(Data, Values, by="Name",
             merge(Data, Values, by="Code")
            )
      )
...