#r #dplyr #tidyr
#r #dplyr #tidyr
Вопрос:
rainfall <- data.frame("date" = rep(1:15),"location_code" = rep(6:8,5),
"rainfall"=runif(15, min=12, max=60))
rainfall30 <- rainfall %>%
group_by(location_code) %>%
filter(rainfall>30)
Я хочу использовать приведенные выше данные для создания следующей таблицы, есть ли способ сделать это в R с помощью dplyr?
date location6 location7 location8
2 47.7
5 46.8
6 32.3
7 55.3
9 40.5
Я только начинаю использовать R, пожалуйста, извинитесь, если на это уже дан ответ. Спасибо.
Комментарии:
1. Вам нужно
tidyr::pivot_wider(rainfall30, names_from = location_code, values_from = rainfall)
?
Ответ №1:
Я думаю, что вы ищете tidyr::pivot_wider
, что превращает эту длинную форму data.frame
в широкую форму. Смотрите Здесь и здесь для получения дополнительной информации о сводке данных с tidyr
помощью .
rainfall30 %>%
pivot_wider(names_from = location_code,
values_from = rainfall)
# date `6` `7` `8`
# <int> <dbl> <dbl> <dbl>
# 1 1 32.3 NA NA
# 2 2 NA 52.7 NA
# 3 3 NA NA 54.3
# 4 4 30.6 NA NA
# 5 7 52.4 NA NA
Ответ №2:
Вот базовый вариант R, использующий reshape
subset
reshape(
subset(rainfall, rainfall > 30),
idvar = "date",
timevar = "location_code",
direction = "wide"
)
что дает что-то вроде приведенного ниже (используется set.seed(1)
для генерации rainfall
)
date rainfall.8 rainfall.6 rainfall.7
3 3 39.49696 NA NA
4 4 NA 55.59397 NA
6 6 55.12270 NA NA
7 7 NA 57.34441 NA
8 8 NA NA 43.71829
9 9 42.19747 NA NA
13 13 NA 44.97710 NA
14 14 NA NA 30.43698
15 15 48.95239 NA NA