Кадр данных r - код множественного совпадения - PullRequest
0 голосов
/ 06 июля 2018

У меня есть два фрейма данных, которые я хочу подключить.

Первый:

V1 <- c("AB1", "AB2", "AB3" ,"AB4" ,"AB5" ,"AB6" ,"AB7","AB6","AB9" ,"AB10")
df1 <- data.frame(V1)

Второй:

V5 <- c("AB1","","","", "AB3", "AB4", "AB5", "AB6")
V6 <- c("AB","AB2","","AB", "", "AB", "", "AB")
V7 <- c("AB","AB","AB","", "AB", "", "AB", "AB")
V8 <- c(1,2,2,2,3,4,5,6)

df2 <- data.frame(V5,V6, V7, V8)

Я пытаюсь найти V1 из df1 в df2 в столбцах V5, V6 и V7 и возвращаю V8 из df2, а также добавляю столбец с yes (когда df $ V1 находится в df2).

Желаемый результат:

V df1$V1    res df$V8   Yes/no
AB1        1            1
AB2        2            1
AB3        3            1
AB4        4            1
AB5        5            1
AB6        6            1
AB7                     0
AB6                     0
AB9                     0
AB10                    0

У меня есть код ниже, но я не могу заставить их работать только для 3 столбцов из df2 одновременно?

df1$res[match(df2$V5,df1$V1, nomatch=0)] <- df2$V6[match(df2$V5,df1$V1, nomatch = 0)]

1 Ответ

0 голосов
/ 06 июля 2018
V1 <- c("AB1", "AB2", "AB3" ,"AB4" ,"AB5" ,"AB6" ,"AB7","AB6","AB9" ,"AB10")
df1 <- data.frame(V1, stringsAsFactors = F)

V5 <- c("AB1","","","", "AB3", "AB4", "AB5", "AB6")
V6 <- c("AB","AB2","","AB", "", "AB", "", "AB")
V7 <- c("AB","AB","AB","", "AB", "", "AB", "AB")
V8 <- c(1,2,2,2,3,4,5,6)
df2 = data.frame(V5,V6,V7,V8, stringsAsFactors = F)

library(tidyverse)

df2 %>%
  gather(v, V1, -V8) %>%           # reshape dataset
  select(-v) %>%                   # remove unecessary variable
  right_join(df1, by="V1") %>%     # join df1
  mutate(YesNo = ifelse(is.na(V8), 0, 1)) %>%   # create Yes/No variable
  distinct() %>%                   # select distinct rows
  select(V1, V8, YesNo)            # arrange columns

#     V1 V8 YesNo
# 1  AB1  1     1
# 2  AB2  2     1
# 3  AB3  3     1
# 4  AB4  4     1
# 5  AB5  5     1
# 6  AB6  6     1
# 7  AB7 NA     0
# 8  AB9 NA     0
# 9 AB10 NA     0

Если вы удалите distinct() из кода, вы получите все строки df1 (не отдельные строки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...