如何在R中按组比较日期和更改另一列中的值

时间:2019-04-13 22:18:46

标签: r dataframe matching

我有两个数据帧

handleChange(nextSubreddit) {
  this.props.dispatch(push('/' + nextSubreddit))
}

如果两个数据帧中相同ID的DATE相同,我想将第一个数据帧中EVENT列的值更改为1。

我尝试用

ID           DATE         EVENT
300-1-003    2019-07-14   4
300-1-004    2019-10-27   4
300-1-004    2019-10-29   4
300-1-008    2019-10-11   4


ID           DATE         EVENT
300-1-001    2019-10-22   0
300-1-002    2019-10-02   0
300-1-004    2019-10-27   0
300-1-004    2019-10-30   0
300-1-008    2019-10-11   0

还尝试过使用过滤器先拟合同一日期。

df1$EVENT= ifelse(df1$DATE=df2$DATE & df1$ID=df2$ID, 1, 4)

但是第二种方法出现以下错误,第一种方法不起作用...

df2_2= filter(df1$DATE=df2$DATE)

class(df1 $ DATE)和class(df2 $ DATE)均为“日期”。 我想要的结果将是

Error: unexpected '=' in "df2_2= filter(df1$DATE="

我已经搜索过如何比较日期。.我想我可以用这种方式比较它? 我已经呆了几个小时,我想我只是不知道该怎么做。。我将不胜感激。...

1 个答案:

答案 0 :(得分:1)

我们可以连接on的'DATE'和'ID'列,并将'df1'中的'EVENT'分配(:=)到1

library(data.table)
setDT(df1)[df2,  EVENT := 1, on = .(DATE, ID)]

此外,ifelse可以更改为

with(df1, ifelse(DATE %in% df2$DATE & ID %in% df2$ID, 1, EVENT))

数据

df1 <- structure(list(ID = c("300-1-003", "300-1-004", "300-1-004", 
"300-1-008"), DATE = c("2019-07-14", "2019-10-27", "2019-10-29", 
"2019-10-11"), EVENT = c(4L, 4L, 4L, 4L)), class = "data.frame", 
row.names = c(NA, -4L))

df2 <- structure(list(ID = c("300-1-001", "300-1-002", "300-1-004", 
"300-1-004", "300-1-008"), DATE = c("2019-10-22", "2019-10-02", 
"2019-10-27", "2019-10-30", "2019-10-11"), EVENT = c(0L, 0L, 
0L, 0L, 0L)), class = "data.frame", row.names = c(NA, -5L))