Проверьте, существует ли значение из одного кадра данных в другом - PullRequest
0 голосов
/ 11 февраля 2020

Я новичок в R и хочу знать, как он будет работать для каждой строки.

Например.

У меня есть два фрейма данных.

Я хочу чтобы увидеть, существуют ли строки в другом фрейме данных. Я хочу l oop каждой строки в ab $ Fruits и проверить, находится ли каждое имя где-то в другом столбце данных bc [E1: E3].

    ab<-data.frame(Fruits = c("Apple","Banana"),Units = c("3","2"))

    bc<-data.frame("E1"=c("Apple","Grapes","Watermelon","Na"),
                   "E2"=c("Grapes","Berries","Custard","Guava"),
                   "E3"=c("Apple","Banana","Grapes","Na"))

например,

Когда начинается цикл, первая строка ab $ fruits совпадает с каждым столбцом b c, если первая строка (Apple) совпадает с bc $ E1, в столбце ab $ new результат должен возвращать 1 и l oop breaks.Again 2nd row (Banana) ищет каждый столбец в b c, если он не совпадает ни с одним в столбце bc $ E1, в ab $ new столбец должен вернуть 0.

Снова l oop повторяется.

Когда ab $ fruits (apple) l oop достигает строки 1 (Apple) и совпадает со столбцом bc $ E3, а строка 2 (Banana) совпадает с Banana, результат должен быть ab $ new = 1 для обе строки.

ЕСЛИ ab $ new для обеих строк == 1, а сумма обеих единиц равна> = 5, создать новый столбец в выводе ab $ view = "Bill" ab:

**SN Fruits     Number New** view
1  Apple       3        1    Bill
2  Banana      2        1    Bill  

Я пробовал% в%, но не получилось.

Нужен совет.

1 Ответ

1 голос
/ 11 февраля 2020

Вы можете использовать unlist и дополнительно unique и %in%, чтобы проверить, есть ли Фрукты .

ab$New <- +(ab$Fruits %in% unique(unlist(bc[-1])))
if(all(ab$New == 1) && sum(as.numeric(as.character(ab$Units))) >= 5) ab$view <- "Bill"
ab
#  Fruits Units New view
#1  Apple     3   1 Bill
#2 Banana     2   1 Bill
...