You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:05:19