Копировать заданное значение для каждого идентификатора в R - PullRequest
1 голос
/ 30 апреля 2020

У меня есть такой набор данных:

ID     DATE     NUMBER
1    01-01-20     1
1    15-01-20     2
1    24-02-20     3
2    15-03-20     1
2    20-04-20     2
2    01-05-20     3

, и я хочу добавить новый столбец, который повторяет значение первой даты для каждого идентификатора, например:

ID     DATE     NUMBER   NEW_DATE
1    01-01-20     1      01-01-20
1    15-01-20     2      01-01-20
1    24-02-20     3      01-01-20
2    15-03-20     1      15-03-20
2    20-04-20     2      15-03-20
2    01-05-20     3      15-03-20

Как мне это сделать? Спасибо всем

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

Вот базовое решение R. ave группирует столбец DATE по ID и извлекает первый элемент каждого сгруппированного вектора.

df1$NEW_DATE <- with(df1, ave(DATE, ID, FUN = '[', 1))

#  ID     DATE NUMBER NEW_DATE
#1  1 01-01-20      1 01-01-20
#2  1 15-01-20      2 01-01-20
#3  1 24-02-20      3 01-01-20
#4  2 15-03-20      1 15-03-20
#5  2 20-04-20      2 15-03-20
#6  2 01-05-20      3 15-03-20

Данные

df1 <- read.table(text = "
ID     DATE     NUMBER
1    01-01-20     1
1    15-01-20     2
1    24-02-20     3
2    15-03-20     1
2    20-04-20     2
2    01-05-20     3
", header = TRUE)
0 голосов
/ 30 апреля 2020

Мы можем использовать first в dplyr

df1 %>%
     group_by(ID) %>%
     mutate(NEW_DATE = first(DATE))

или другой вариант в duplicated

df1$NEW_DATE <- df1$DATE[!duplicated(df1$ID)][cumsum(!duplicated(df1$ID))]

data

df1 <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 2L), DATE = structure(c(1L, 
3L, 6L, 4L, 5L, 2L), .Label = c("01-01-20", "01-05-20", "15-01-20", 
"15-03-20", "20-04-20", "24-02-20"), class = "factor"), NUMBER = c(1L, 
2L, 3L, 1L, 2L, 3L)), class = "data.frame", row.names = c(NA, 
-6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...