Как заменить некоторые значения столбца в фрейме данных на основе другого фрейма данных с помощью отложенной даты и идентификатора? - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь заменить некоторые значения в столбце фрейма данных с помощью даты и идентификатора в другом фрейме данных, но мне не удается найти какое-либо решение. Это будет более понятно на примере.

У меня есть два фрейма данных, построенных следующим образом:

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

Я бы хотел замените «значения» в df.2 для каждого идентификатора на «значения» в df.1 на следующую дату, т. е. значениями на 2011-02-05, но мне не удается их заменить. Таким образом, я хотел бы получить:

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

Ваша помощь будет очень признательна. Если требуется какое-либо редактирование вопроса, не стесняйтесь, дайте мне знать.

Ответы [ 2 ]

2 голосов
/ 28 марта 2020

Если следующая дата означает дату + 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

Создано в 2020-03-28 пакетом представ (v0.3.0)

1 голос
/ 28 марта 2020

Это то, что вы ищете?

library(lubridate)
library(dplyr)
df.2$values <- df.1 %>% filter (ID == df.2$ID & date == (df.2$date +1)) %>% select(values) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...