Мы можем использовать mapply
:
df$Z <- mapply(function(x, y) {
temp <- intersect(x, y)
if(length(temp)) temp else ""
}, strsplit(df$x, ","), df$y)
df
# x y Z
#1 A,B,C A A
#2 A,D D D
#3 B,C,E A
#4 C,E,G <NA>
Если в y
есть несколько значений, мы можем разбить строку на y
и вернуть значение, разделенное запятыми.
df$Z <- mapply(function(x, y) {
temp <- intersect(x, y)
if(length(temp)) toString(temp) else ""
}, strsplit(df$x, ","), strsplit(df$y, ","))
данные
df <- data.frame(x = c("A,B,C","A,D","B,C,E","C,E,G"),
y = c("A","D","A",NA),
stringsAsFactors = FALSE)