Слияние и расширение данных по группам - PullRequest
0 голосов
/ 18 апреля 2019

Предположим, у меня есть фрейм данных df, например:

> df <- data.frame(ID = c("A","B","C"),
                 value = c(1,2,3))
> df
  ID value
1  A     1
2  B     2
3  C     3

Я бы хотел расширить df, добавив столбец Date из серии значений даты.Столбец даты следует повторить на основе ID.Таким образом, результат будет выглядеть так:


> df_new
  ID value  Date
1  A     1  2017-4-1
2  A     1  2017-4-2
3  A     1  2017-4-3
1  B     2  2017-4-1
2  B     2  2017-4-2
3  B     2  2017-4-3
1  C     3  2017-4-1
2  C     3  2017-4-2
3  C     3  2017-4-3

Я считаю, что сообщение похоже на мою проблему, но решение не относится к моей.Ниже я попытаюсь использовать tidyr:


date <- c(seq(as.Date('2017-4-1'),as.Date('2017-4-3'), by = "days"))

df_new <- df %>% group_by(ID) %>% 
                 mutate(Date = date)

Error: Column `Date` must be length 1 (the group size), not 3

Есть идеи?Заранее спасибо.

1 Ответ

2 голосов
/ 18 апреля 2019
df %>% left_join(expand.grid(ID = unique(df$ID), date = date))
# Joining, by = "ID"
#   ID value       date
# 1  A     1 2017-04-01
# 2  A     1 2017-04-02
# 3  A     1 2017-04-03
# 4  B     2 2017-04-01
# 5  B     2 2017-04-02
# 6  B     2 2017-04-03
# 7  C     3 2017-04-01
# 8  C     3 2017-04-02
# 9  C     3 2017-04-03

expand.grid - классическая функция base для генерации всех комбинаций.Вы можете заменить его на tidyr::crossing для того же результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...