Удаление повторяющихся строк на основе самой последней записи
Приношу свои извинения, поскольку я знаю, что варианты этого вопроса задавались раньше, но я попытался найти предоставленные ответы и не смог применить их к своим данным.
У меня есть следующие данные по результатам опроса. Несколько человек прошли опросы для участия в различных вебинарах. Человек мог пройти более одного опроса, если он посетил более одного вебинара. Я хотел бы сохранить только последние результаты опроса от каждого человека (т. Е. Удалить дубликаты, но сохранить самые последние результаты опроса на основе столбца «Дата отправки опроса»).
Образец текущих данных:
Name <- c("John", "Sara", "Nakita", "John", "Raj")
Webinar Code <- c(4, 4, 4, 2, 4)
Date Survey Submitted <- c("1/1/20", "1/1/20", "1/1/20", "1/15/20", "1/1/20")
Желаемый результат:
Name <- c("Sara", "Nakita", "John", "Raj")
Webinar Code <- c(4, 4, 2, 4)
Date Survey Submitted <- c("1/1/20", "1/1/20", "1/15/20", "1/1/20")
Я ограничен в своих познаниях в R, но до сих пор использую функцию independent () для удаления повторяющихся строк. Но я не знаю, как добавить условие, чтобы сохранить строку с самой последней датой. Я надеюсь найти не слишком сложное решение. Заранее спасибо!

3 ответа
Если вы хотите сохранить порядок, вы можете:
library(tidyverse)
library(lubridate)
dat %>%
rownames_to_column("id") %>%
arrange(desc(myd(Date_Survey_Submitted))) %>%
filter(!duplicated(Name)) %>%
arrange(id)%>%
select(names(dat))
Name Webinar_Code Date_Survey_Submitted
1 Sara 4 1/1/20
2 Nakita 4 1/1/20
3 John 2 1/15/20
4 Raj 4 1/1/20
Это хорошее приложениеdplyr::slice_max
library(tidyverse)
dat <- data.frame(Name = c("John", "Sara", "Nakita", "John", "Raj"),
Webinar_Code = c(4, 4, 4, 2, 4),
Date_Survey_Submitted = c("1/1/20", "1/1/20", "1/1/20", "1/15/20", "1/1/20"))
dat %>%
mutate(Date_Survey_Submitted = as.Date(Date_Survey_Submitted, "%m/%d/%y")) %>%
group_by(Name) %>%
slice_max(order_by = Date_Survey_Submitted, n = 1)
#> # A tibble: 4 x 3
#> # Groups: Name [4]
#> Name Webinar_Code Date_Survey_Submitted
#> <chr> <dbl> <date>
#> 1 John 2 2020-01-15
#> 2 Nakita 4 2020-01-01
#> 3 Raj 4 2020-01-01
#> 4 Sara 4 2020-01-01
Создано 21.04.2021 пакетом REPEX (v1.0.0)
Вы можете изменить классDateSurveySubmitted
на свидание,arrange
данные на основе даты в порядке убывания и выберите первую строку для каждогоName
.
library(dplyr)
df %>%
mutate(DateSurveySubmitted = as.Date(DateSurveySubmitted, '%m/%d/%y')) %>%
arrange(Name, desc(DateSurveySubmitted)) %>%
distinct(Name, .keep_all = TRUE)
# Name WebinarCode DateSurveySubmitted
#1 John 2 2020-01-15
#2 Nakita 4 2020-01-01
#3 Raj 4 2020-01-01
#4 Sara 4 2020-01-01
Или используяgroup_by
и выберите максимальную строку для каждогоName
.
df %>%
mutate(DateSurveySubmitted = as.Date(DateSurveySubmitted, '%m/%d/%y')) %>%
group_by(Name) %>%
slice(which.max(DateSurveySubmitted)) %>%
ungroup
данные
Name <- c("John", "Sara", "Nakita", "John", "Raj")
WebinarCode <- c(4, 4, 4, 2, 4)
DateSurveySubmitted <- c("1/1/20", "1/1/20", "1/1/20", "1/15/20", "1/1/20")
df <- data.frame(Name, WebinarCode, DateSurveySubmitted)
Другие вопросы
- Создайте сводную таблицу двух категориальных и числовых переменных1 ответ
У меня есть следующий гипотетический фреймворкRegion <- c("District A", "District B","District A","District A","District B") Gender <- c("Male","Male","Female", "Male","Female") Age <- c(20, ...
- Создайте цикл для генерации имен столбцов в большом списке1 ответ
Я хотел бы создать цикл, чтобы изменить имена столбцов, как показано:a <- c("day", "month", "year", "flow") У меня есть большой список из 6937 элементов, которые мне удалось импортировать в R:library(tidyverse) library(readtext) txt_files_ls <- paste...
- Построение лаговой матрицы в R1 ответ
Каждый год несколько человек переезжают в деревню. Это представлено следующим вектором:x <- c(304, 213, 688, 400, 122, 449, 143, 90) Ежегодно из села уезжает 10% людей. Доля людей из каждой когорты, остающихся через определенное количество лет (за 10 лет):decay <- (1-0.1)^(0:10) Используя R, к...
- назначать имена столбцам фреймов данных в списке1 ответ
У меня есть список фреймов данных# Create dummy data df1<-data.frame( c(1,2,3),c(2,3,4)) df2<-data.frame(c(5,6,7),c(4,5,6)) # Create a list l<-list(df1, df2) Я хочу присвоить столбцам имена. В видеl[[1]][,1] дает мне доступ к первому столбцу, я думал, что могу назначить 'names' в ...
- Моя горизонтальная полоса обрезает текст, когда я сохраняю изображение. Как сделать полосы короче, а текст длиннее?1 ответ
Я новичок в R, так что простите мое невежество. Итак, я создал базовую горизонтальную гистограмму, используяbarplot( ). Мой текст на оси Y в основном исчезает. [IMG_OUR_ID=67.png] [IMG_OUR_ID=68.png] Есть ли способ удлинить и отобразить текст? Это мой код:barplot(mydata$`Sum Impact Risk`~mydata$`Eco...
- Почему case_when () вычисляет ложное условие?3 ответ
У меня есть data.frame с групповой переменной и целочисленной переменной с отсутствующими данными.df<-data.frame(group=c(1,1,2,2,3,3),a=as.integer(c(1,2,NA,NA,1,NA))) Я хочу вычислить максимально доступное значение переменнойa внутри каждой группы: в моем примере я должен получить 2 для группы 1...

"Завидую тестировщикам: все хотят с ними дружить."
arrange(Date)
а затемdistinct()
. Я не уверен, как сортируются даты, но я бы попробовалarrange(desc(Date))
в порядке убывания. Убедитесь, что даты являются фактическими датами, а не обычными строками, используяas.Date()
иначе они будут отсортированы неправильно. Elle