【问题标题】:match several datasets with predefined values starting with匹配多个具有预定义值的数据集
【发布时间】:2020-12-05 22:42:28
【问题描述】:
DF<-data.frame(id=c(1,2,3,4,5,6),date=c("2001-01-01","NA","2005-05-05","2006-06-06","2007-07-07","NA"))

  id       date
1  1 2001-01-01
2  2         NA
3  3 2005-05-05
4  4 2006-06-06
5  5 2007-07-07
6  6         NA

DF1<-data.frame(id=c(1,3,7,8,9,11),cdate=c("2000-12-20","2002-02-02","2003-03-03","2004-04-04","2005-05-05","2006-06-06"),atc=c("AAA1","BBB","AAA","DDD","CCC","AAA"))

  id      cdate atc
1  1 2000-12-20 AAA1
2  3 2002-02-02 BBB
3  7 2003-03-03 AAA
4  8 2004-04-04 DDD
5  9 2005-05-05 CCC
6 11 2006-06-06 AAA

 DF2<-data.frame(id=c(1,2,3,4,8,9),cdate=c("2000-12-20","2002-02-02","2005-04-05","2004-04-04","2005-05-05","2006-06-06"),op=c("AA3","BB","AA","DD","CC","AA"))

  id      cdate op
1  1 2000-12-20 AA3
2  2 2002-02-02 BB
3  3 2005-04-05 AA
4  4 2004-04-04 DD
5  8 2005-05-05 CC
6  9 2006-06-06 AA

LM<-c("AAA","AA","BB")

现在我想检查 DF1 和 DF2 是否包含 DF 中的任何 id,其中 atc/op 以 LM 中的值开头。最后,cdate 不应比 date 早 90 年。

期望的输出:

  id opatc
1  1     1
2  2     0
3  3     1
4  4     0
5  5     0
6  6     0

解决这个问题的最聪明的方法(最短的代码)是什么? 最佳H

【问题讨论】:

  • id 1 和 3 不应该像 DF1 和 DF2 那样在所需的输出中有两个结果
  • 不,不然

标签: r


【解决方案1】:

使用 tidyverse,你可以这样做:

library(tidyverse)
DF %>%
  left_join(DF1, "id")%>%
  left_join(DF2, "id")%>%
  mutate( cdate.x = as.Date(cdate.x),cdate.y = as.Date(cdate.y),
          date = as.Date(date),
          opatc = date - pmax(coalesce(cdate.x,cdate.y), cdate.y) <= 90) %>%
  group_by(id)%>%
  mutate(opatc = +(opatc&invoke("|",across(c(atc, op),
                                ~any(sub("\\d+$","",.x)%in%LM)))))%>%
  replace_na(list(opatc = 0))%>%
  select(id, opatc)

# A tibble: 6 x 2
# Groups:   id [6]
     id opatc
  <dbl> <dbl>
1     1     1
2     2     0
3     3     1
4     4     0
5     5     0
6     6     0

         

【讨论】:

  • 非常感谢 Onyambu!我必须仔细研究一些功能。优秀
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 2019-08-04
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多