【发布时间】:2018-12-07 21:42:15
【问题描述】:
我有 3 个数据框,df1 = 时间间隔,df2 = ID 列表,df3 = 具有关联日期的 ID 列表。
df1 <- structure(list(season = structure(c(2L, 1L), .Label = c("summer",
"winter"), class = "factor"), mindate = structure(c(1420088400,
1433131200), class = c("POSIXct", "POSIXt")), maxdate = structure(c(1433131140,
1448945940), class = c("POSIXct", "POSIXt")), diff = structure(c(150.957638888889,
183.040972222222), units = "days", class = "difftime")), .Names = c("season",
"mindate", "maxdate", "diff"), row.names = c(NA, -2L), class = "data.frame")
df2 <- structure(list(ID = c(23796, 23796, 23796)), .Names = "ID", row.names = c(NA,
-3L), class = "data.frame")
df3 <- structure(list(ID = c("23796", "123456", "12134"), time = structure(c(1420909920,
1444504500, 1444504500), class = c("POSIXct", "POSIXt"), tzone = "US/Eastern")), .Names = c("ID",
"time"), row.names = c(NA, -3L), class = "data.frame")
如果 df2$ID == df3$ID,代码应该进行比较。如果为真,并且如果 df3$time >= df1$mindate 并且 df3$time
df1$result <- ifelse(df2[1,1] == df3[1,1] & df3[1,2] >= df1$mindate & df3[1,2] <= df1$maxdate,
difftime(df1$maxdate,df3[1,2],units="days"),
difftime(df1$maxdate,df1$mindate,units="days")
编辑:所需的输出是(删除 df2 的最后一行时):
season mindate maxdate diff result
1 winter 2015-01-01 2015-05-31 23:59:00 150.9576 days 141.9576
2 summer 2015-06-01 2015-11-30 23:59:00 183.0410 days 183.0410
有什么想法吗?我不知道如何合并 dfs 以使它们具有相同的长度。请注意,df2 可以是任意行长,并且不会影响代码。当 df1 和 df3 的行数不同时会出现问题。
【问题讨论】:
-
能否添加您想要的输出?
标签: r if-statement dataframe