#r #dplyr
#r #dplyr
Вопрос:
Рассмотрим следующее подмножество моего набора данных, состоящее примерно из 22 000 человек.
df<-data.frame( c("Den Haag", "Den Haag", "Den Haag", "Rotterdam", "Den Haag",
"Den Haag", "Amsterdam"),
c("R007", "R007", "R008", "R008", "R008", "R009", "R009"),
c(20130101, 20140101 ,20130101, 20130101, 20140101, 20130101, 20140101),
c(40000,42000,22000,20000,38000,10000, 15000))
colnames(df)<-c("Gemeente", "id", "Date", "income")
df$Date<-as.character(df$Date)
df$Date<-as.Date(df$Date, "%Y%m%d")
В приведенном выше наборе данных «Gemeente» обозначает место, где работают люди, а переменная id — это человек. Моя цель — удалить все наблюдения, которые работают более чем на 1 рабочем месте в моей выборке. Не имеет значения, работают ли они на разных рабочих местах в последующие годы (R009) или в том же году (R008). Точнее, я также хочу отказаться от R008 для 2013 и 2014 годов, потому что этот человек работает в двух муниципалитетах в 2013 году. Таким образом, в данном случае это означает, что я удалю оба наблюдения R008 и R009 и оставлю только R007.
Я думал, что мог бы сделать это следующим образом, но я делаю что-то не так с командой unique, которая выбирает все уникальные идентификаторы в образце, в то время как я хочу выбрать только R007. Кто-нибудь знает, какую команду я должен использовать вместо этого?
#Select unique rows of observations based on muncipality and id
library(dplyr)
#Select all unique combinations of Municipality and ids
test<-distinct(df, Gemeente, id))
#Select the number of unique ids (i.e. drop the ids that work at more than one place in our dataset)
#But here I only want to select id R007, but with this command I select all three. So this is where I go wrong.
test2<-as.data.frame(unique(test$id))
colnames(test2)[1]<-"id"
test2$nr<-1
#Use left_join to the initial dataset.
dffinal<-left_join(df, test2, by = "id")
dffinal<-subset(dffinal, nr ==1)
Я ценю любую помощь.
Ответ №1:
Работает ли это:
library(dplyr)
df %>% group_by(id) %>% filter(length(unique(Gemeente)) == 1)
# A tibble: 2 x 4
# Groups: id [1]
Gemeente id Date income
<fct> <fct> <date> <dbl>
1 Den Haag R007 2013-01-01 40000
2 Den Haag R007 2014-01-01 42000
>
Комментарии:
1.
n_distinct()
является более быстрым и кратким эквивалентомlength(unique())
.