【发布时间】:2019-07-05 12:54:16
【问题描述】:
我使用 for 循环创建了DF1,或者从某人那里得到了它。我想检查DF2 是否有相应日期的值(作为列表或连接在字符串中)。我经常遇到这种情况。
这是代码。
library(dplyr)
library(magrittr)
DF1 <- data.frame(det = as.Date(c('2013-02-02','2018-01-11','2011-07-10')),nos = c("1|3","4|2|1","3|4")) %>% print
DF2 <- data.frame(det1 = as.Date(c('2013-02-02','2018-01-11')),no = c(1,3)) %>% print
DF1 = left_join(DF2,DF1,by=c('det1'='det')) %>%
mutate(list_column = strsplit(nos,split = "\\|")) %>%
print
# DF1
# det1 no nos
# 1 2013-02-02 1 1|3
# 2 2018-01-11 2 4|2|1
for(i_ in 1:nrow(DF1)){
# i_ = 1
temp = DF1[i_,]
list_vals = temp$list_column %>% as.vector() %>% unlist() %>% as.numeric() %>% print
DF1$present[i_] = temp$no %in% list_vals
}
#R>DF1
# det1 no nos list_column present
#1 2013-02-02 1 1|3 1, 3 TRUE
#2 2018-01-11 3 4|2|1 4, 2, 1 FALSE
如果no 是nos 之一,那么创建另一个逻辑列的最佳方法是什么?如何实现我想要做的事情或更好地完成我想要最终得到的事情?
我欢迎任何解决方案 base、tidyverse 或 data.table。
EDIT-1
我正在寻找消除for 循环。
【问题讨论】:
标签: r data.table tidyverse