我有一个DF,想同时查询辅助表中的多个列。 DF示例
KEY <- c(123,456,789,111,222,333)
DAY_1 <- c('RICE','','RICE','','RICE','')
DAY_2 <- c('BEAN','','BEAN','','','BEAN')
DAY_3 <- c('POTATO','','POTATO','','POTATO','POTATO')
DAY_4 <- c('LETTUCE','LETTUCE','','LETTUCE','','LETTUCE')
DAY_5 <- c('STEAK','','STEAK','','STEAK','STEAK')
DF <- data.frame(KEY,DAY_1,DAY_2,DAY_3,DAY_4,DAY_5)
我的辅助表
AUX <- c('RICE','BEAN')
TABLE_AUX <- data.frame(AUX)
因此,我想同时查询5列(DAY_1至DAY_5),以检查密钥是否食用了辅助表中的任何食物(米 OR 豆)。
因此,我希望看到以下输出:
KEY <- c(123,456,789,111,222,333)
DAY_1 <- c('RICE','','RICE','','RICE','')
DAY_2 <- c('BEAN','','BEAN','','','BEAN')
DAY_3 <- c('POTATO','','POTATO','','POTATO','POTATO')
DAY_4 <- c('LETTUCE','LETTUCE','','LETTUCE','','LETTUCE')
DAY_5 <- c('STEAK','','STEAK','','STEAK','STEAK')
TEST <- c('YES','NO','YES','NO','YES','YES')
DF <- data.frame(KEY,DAY_1,DAY_2,DAY_3,DAY_4,DAY_5,TEST)
谢谢!
答案 0 :(得分:1)
有多个选项可获取输出。我们要么用apply
和MARGIN = 1
遍历行,检查是否存在'AUX'any
行的%in%
元素,然后将逻辑向量更改为“ YES /改为数字索引
nm1 <- grep("^DAY_\\d+$", names(DF), value = TRUE)
DF$TEST <- apply(DF[nm1], 1, function(x) c("NO", "YES")[any(x %in% AUX) + 1])
DF$TEST
#[1] "YES" "NO" "YES" "NO" "YES" "YES"
或者使用lapply
和Reduce
c("NO", "YES")[Reduce(`|`, lapply(DF[nm1], `%in%`, AUX)) + 1]