У нас есть данные опроса для опроса, которые респонденты могут проводить несколько раз, и мы хотим сохранить только первые 10 записей на респондента.Респондент должен предоставить либо адрес электронной почты, либо номер телефона, который мы хотим использовать для проверки на наличие дубликатов.
Используя R, я упорядочил данные по дате ответа и использовал следующий код для добавления подсчета дляадреса электронной почты и номера телефонов:
surveydata <- surveydata %>%
group_by(email) %>%
mutate(email_count = row_number())
surveydata <- surveydata %>%
group_by(phone) %>%
mutate(phone_count = row_number())
Я думал, что смогу просто отфильтровать записи, где email_count или phone_count было больше 10. Однако этот процесс также подсчитал все NA вместе, так что если я отфильтровал всеиз записей с числом больше 10, я бы удалил много записей, которые мы на самом деле хотим сохранить.
Я попробовал следующее утверждение if, чтобы попытаться сбросить значения email_count и phone_count, если адрес электронной почты или телефонные записибыли пустыми, но это не сработало:
# This doesn't work
if (is.na(surveydata$email)) {
surveydata$email_count = 0
}
Несмотря на то, что код выполнялся без ошибок, ни одна из записей без электронных писем не имела значения email_count равным 0.
Я использовал следующий кодсоздать новые таблицы данных, в которых перечислены адреса электронной почты и номера телефонов, которые встречаются более 10 раз:
dup_emails <- data.frame(table(surveydata$email))
dup_phones <- data.frame(table(surveydata$phone))
dup_emails <- dup_emails[dup_emails$Freq > 10,]
dup_phones <- dup_phones[dup_phones$Freq > 10,]
Я бы хотелЧтобы создать цикл For для проверки каждой строки в surveyydata, где, если адрес электронной почты или номер телефона совпадают с одним из адресов электронной почты или телефонных номеров в dup_emails или dup_phones, а значение email_count или phone_count превышает 10, тогда установите новую переменную "remove "to 1. После этого я мог бы отфильтровать любые данные, где" remove "= 1.
Я написал следующий код, но он не работает.Все значения для «удалить» остаются 0:
# This doesn't work
surveydata$remove <- 0
for (i in length(unique(dup_emails$Var1))) {
if(surveydata$email == dup_emails[i,1] && thdsweeps$email_count > 10) {
surveydata$remove <- 1
}
}
Любая помощь или предложения будут с благодарностью!