![](/img/trans.png)
[英]replace some column values from a data.frame based on another data.frame
[英]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.