#r
#r
Вопрос:
У меня есть следующий df,
ID event eventdate1 date2 date3 date4 date5 index1 index2 index3
1 before 1/22/2020
1 now 10/20/2017 10/25/2017
1 later 03/02/2020 0 1 0
1 tomo 05/05/2020 0 0 0
Я хотел бы изменить это на wide, и ожидаемый результат будет,
ID date2 eventdate1 date3 date4 date5 index1 index2 index3
1 1/22/2020 05/05/2020 10/20/2017 10/25/2017 0 0 0
eventdate1 связан с событием.
eventdate1 всегда будет печатать последнюю дату, то есть для tomo.
То же самое для index1, index2 и index3. Все остальные даты будут иметь только одну дату в столбце.
date5 пуст, и я надеюсь сохранить его пустым
Я надеюсь использовать reshape, но любой другой метод тоже будет работать.
Комментарии:
1. Его R…@DaniMesejo
2. столбец date2 присутствует в ожидаемом выводе. Многие строки являются пустыми строками и намерены сохранить их пустыми во время изменения формы
Ответ №1:
С dplyr
вами можно попробовать :
library(dplyr)
df %>%
group_by(ID) %>%
summarise(across(eventdate1:index3, ~{
x <- .[.!='']
if(length(x)) last(x) else ''
})) -> result
result
# ID eventdate1 date2 date3 date4 date5 index1 index2 index3
# <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#1 1 05/05/2020 1/22/2020 10/20/2017 10/25/2017 "" 0 0 0
Для более старой версии dplyr
использования :
df %>%
group_by(ID) %>%
summarise_at(vars(eventdate1:index3), ~{
x <- .[.!='']
if(length(x)) last(x) else ''
}) -> result
данные
df <- structure(list(ID = c(1L, 1L, 1L, 1L), event = c("before", "now",
"later", "tomo"), eventdate1 = c("", "", "03/02/2020", "05/05/2020"
), date2 = c("1/22/2020", "", "", ""), date3 = c("", "10/20/2017",
"", ""), date4 = c("", "10/25/2017", "", ""), date5 = c("", "",
"", ""), index1 = c("", "", "0", "0"), index2 = c("", "", "1", "0"),
index3 = c("", "", "0", "0")), row.names = c(NA, -4L), class = "data.frame")
Комментарии:
1. Ошибка в методе использования («group_by_»): нет применимого метода для ‘group_by_’, применяемого к объекту класса «функция»
2. @AishwaryaPrabhu Пожалуйста, замените
df
на имя вашего фрейма данных.3. Ошибка в summarise_impl (.data, точки): ошибка оценки: не удалось найти функцию «поперек».
4.
across
присутствует в более новой версииdplyr
, т.е. 1.0.0 или выше. Вы можете обновить свой пакетinstall.packages('dplyr')
до последней версии или просмотреть обновленный ответ сsummarise_at
помощью .5. Там не хватало нескольких пакетов, но это сработало. Спасибо. Я кое-что узнал