如何按R中的组比较日期和更改另一列中的值
How to compare dates and change values in another column by groups in R
我有两个数据框,
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
如果两个数据框中相同 ID 的 DATE 相同,我想将第一个数据框中 EVENT 列中的值更改为 1。
我试过
df1$EVENT= ifelse(df1$DATE=df2$DATE & df1$ID=df2$ID, 1, 4)
也试过先用过滤器来拟合相同的日期..
df2_2= filter(df1$DATE=df2$DATE)
但是第二种方法出现如下错误,第一种方法不起作用...
Error: unexpected '=' in "df2_2= filter(df1$DATE="
class(df1$DATE) 和 class(df2$DATE) 都是 "Date"。
我想要的结果就像
ID DATE EVENT
300-1-003 2019-07-14 4
300-1-004 2019-10-27 1
300-1-004 2019-10-29 4
300-1-008 2019-10-11 4
我搜索了如何比较日期。我想我可以这样比较吗?
我已经坚持了几个小时,我想我只是不知道该怎么做。如果有任何帮助,我将不胜感激....
我们可以加入 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))
我有两个数据框,
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
如果两个数据框中相同 ID 的 DATE 相同,我想将第一个数据框中 EVENT 列中的值更改为 1。
我试过
df1$EVENT= ifelse(df1$DATE=df2$DATE & df1$ID=df2$ID, 1, 4)
也试过先用过滤器来拟合相同的日期..
df2_2= filter(df1$DATE=df2$DATE)
但是第二种方法出现如下错误,第一种方法不起作用...
Error: unexpected '=' in "df2_2= filter(df1$DATE="
class(df1$DATE) 和 class(df2$DATE) 都是 "Date"。 我想要的结果就像
ID DATE EVENT
300-1-003 2019-07-14 4
300-1-004 2019-10-27 1
300-1-004 2019-10-29 4
300-1-008 2019-10-11 4
我搜索了如何比较日期。我想我可以这样比较吗? 我已经坚持了几个小时,我想我只是不知道该怎么做。如果有任何帮助,我将不胜感激....
我们可以加入 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))