计数并从数据集中删除

count and remove from dataset

如果条件满足,我想从我的数据集中删除某些人。我有面板数据,理想情况下,我想计算每个人完成的次数,如果有人从未完成任何事情,则将其从我的数据集中删除。

people <- c(1,1,1,2,2,3,3,4,4,5,5)
activity <- c(1,1,1,2,2,3,4,5,5,6,6)
completion <- c(0,0,1,0,1,1,1,0,0,0,1)

完成0表示没有完成,1表示完成。

所以,在这种情况下,我需要检测 4 号人从未完成 activity 5,因此将从数据集中完全删除所有行。然而,这只让我知道 activitys 从未完成,即使一些 activitys 最终会完成。 然后我会像那样删除它们。 我试过 运行 ifelse 条件:

df$nevercompleted <- ifelse(df$completion == 0)
df<-subset(df,completion == 0)

一个dplyr解决方案。

## Create the dataframe
df <- tibble(
    people = c(1,1,1,2,2,3,3,4,4,5,5),
    activity = c(1,1,1,2,2,3,4,5,5,6,6),
    completion = c(0,0,1,0,1,1,1,0,0,0,1))

df %>% 
## Group observations by people
group_by(people) %>% 
## Create total completions per individual
mutate(tot_completion = sum(completion)) %>% 
## Keep only people with strictly positive number of completions
filter(tot_completion > 0)

选项base R

df[with(df, ave(completion, people, FUN = sum)) > 0,]