繁体   English   中英

如何通过滞后日期和 ID 根据另一个数据框替换数据框中某列的某些值?

[英]How to replace some values of a column in a data frame based on another data frame through a lagged date and ID?

我试图在另一个数据框中的日期和 ID 的帮助下替换数据框列中的某些值,但我无法找到任何解决方案。 举个例子会更清楚。

我有两个数据框构造如下:

date.1 <- c("01.02.2011","02.02.2011","03.02.2011","04.02.2011","05.02.2011","01.02.2011","02.02.2011","03.02.2011","04.02.2011","05.02.2011")
date.1 <- as.Date(date.1, format="%d.%m.%Y")
values.1 <- c("1","3","5","1","2","6","7","8","9","10")
ID.1 <- c("10","10","10","10","10","11","11","11","11","11")

df.1 <- data.frame(date.1, values.1, ID.1)
names(df.1) <- c("date","values","ID")

date.2 <- c("04.02.2011","04.02.2011")
date.2 <- as.Date(date.2, format="%d.%m.%Y")
values.2 <- c("1", "9")
ID.2 <- c("10","11")

df.2 <- data.frame(date.2, values.2, ID.2)
names(df.2) <- c("date","values","ID")

看起来像:

> df.1
         date values ID
1  2011-02-01      1 10
2  2011-02-02      3 10
3  2011-02-03      5 10
4  2011-02-04      1 10
5  2011-02-05      2 10
6  2011-02-01      6 11
7  2011-02-02      7 11
8  2011-02-03      8 11
9  2011-02-04      9 11
10 2011-02-05     10 11


> df.2
        date values ID
1 2011-02-04      1 10
2 2011-02-04      9 11

我想在下一个日期将每个 ID 的 df.2 中的“值”替换为 df.1 的“值”,即使用 2011-02-05 上的值,但我无法替换它们。 因此,我想获得:

> df.2
            date values ID
    1 2011-02-04      2 10
    2 2011-02-04     10 11

您的帮助将不胜感激。 如果需要对问题进行任何编辑,请随时告诉我。

如果下一个日期是日期 + 1 天,那么试试这个:

library(dplyr)

df.2 %>% 
  mutate(date1 = date + 1) %>% 
  select(-values) %>% 
  left_join(df.1, by = c(date1 = "date", ID = "ID")) %>% 
  select(-date1)
#>         date ID values
#> 1 2011-02-04 10      2
#> 2 2011-02-04 11     10

reprex 包(v0.3.0) 于 2020 年 3 月 28 日创建

这是你想要的?

library(lubridate)
library(dplyr)
df.2$values <- df.1 %>% filter (ID == df.2$ID & date == (df.2$date +1)) %>% select(values) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM