简体   繁体   中英

New column based on conditions in R

I have a data frame

my_data = data.frame(ITEM_GROUP = c("1","2","3","1","4"),
                     ITEM_NAME = c("Apple","Banana","Orange","Mango","Papaya"), 
                     ITEM = c("Apple","Bana","Orange","sweet","Paneer"))

I have a list initially it

my_data$name <- apply(my_data, 
                      1, 
                      function(x) as.integer(any(grep("Apple|Orange|Milk|Paneer",x))))

ITEM_GROUP ITEM_NAME   ITEM name
1              Apple  Apple    1
2             Banana   Bana    0
3             Orange Orange    1
1              Mango  sweet    0
4             Papaya Paneer    1

在此处输入图像描述

Instead of 0 and 1 I am trying the following output

ITEM_GROUP   ITEM_NAME   ITEM        name

1              Apple     Apple        Apple
2             Banana     Bana         Unknown
3              Orange    Orange       Orange
1             Mango      Sweet        Sweet
4             Papaya     Paneer       Paneer

在此处输入图像描述

Thanks in Advance

We could do a rowwise , get the intersect between the columns 'ITEM_NAME', 'ITEM', and the vector of values. If none of them matches, return 'Unknown'

library(dplyr)
my_data %>% 
    rowwise %>% 
    mutate(name = c(intersect(c(ITEM_NAME, ITEM), 
        c("Apple", "Orange", "Milk", "Paneer")), "Unknown")[1]) %>% 
    ungroup

-output

# A tibble: 5 x 4
  ITEM_GROUP ITEM_NAME ITEM   name   
  <chr>      <chr>     <chr>  <chr>  
1 1          Apple     Apple  Apple  
2 2          Banana    Bana   Unknown
3 3          Orange    Orange Orange 
4 1          Mango     sweet  Unknown
5 4          Papaya    Paneer Paneer 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM