R语言如何删除数据框中观测数未达要求的个体?
筛选观测数完整的个体解决方案
你可以通过以下两种方法实现需求,保留1980-1984年拥有完整5条观测的个体,删除观测缺失的ID:
方法一:直接分组过滤
利用dplyr的分组功能,直接在分组后筛选出观测数为5的组:
library(dplyr) # 原始数据集 df <- data.frame(year = c(1980, 1981, 1982, 1983, 1984, 1980, 1981, 1982, 1983, 1980, 1981, 1982, 1983, 1984), id = c(1,1,1,1,1,2,2,2,2,3,3,3,3,3), value = c(4,3,5,8,9,5,1,5,6,4,5,6,3,2)) # 筛选出每组观测数为5的所有行 filtered_df <- df %>% group_by(id) %>% filter(n() == 5) %>% # 保留组内观测数等于5的ID ungroup() # 查看结果 print(filtered_df)
执行后会得到你预期的输出,自动剔除ID为2的所有行。
方法二:基于已有计数表筛选
如果你想沿用已经生成的summary计数表,可以先提取符合条件的ID,再过滤原数据:
library(dplyr) # 原始数据集 df <- data.frame(year = c(1980, 1981, 1982, 1983, 1984, 1980, 1981, 1982, 1983, 1980, 1981, 1982, 1983, 1984), id = c(1,1,1,1,1,2,2,2,2,3,3,3,3,3), value = c(4,3,5,8,9,5,1,5,6,4,5,6,3,2)) # 你已有的计数代码 summary <- df %>% group_by(id) %>% summarise(headcount = n()) # 提取观测数为5的ID列表 valid_ids <- summary %>% filter(headcount == 5) %>% pull(id) # 过滤原数据集,只保留有效ID的行 filtered_df <- df %>% filter(id %in% valid_ids) # 查看结果 print(filtered_df)
两种方法都能得到相同的结果,可根据习惯选择。
内容的提问来源于stack exchange,提问作者Ayoze Alfageme
相关产品推荐
相关产品推荐

