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

如何删除数据集中x4变量在2017与2018年值不匹配的行?

解决方法:删除x4值在2017和2018年不匹配的行

首先先把你的数据集在R中还原,方便后续操作:

df <- structure(list(x1 = c(52L, 74L, 61L, 63L, 44L), 
                     x2 = c(32L, 96L, 83L, 35L, 95L), 
                     x3 = c(9L, 36L, 7L, 33L, 67L), 
                     x4 = c(1L, 2L, 3L, 2L, 3L), 
                     x5 = c(2017L, 2017L, 2017L, 2018L, 2018L)), 
                .Names = c("x1", "x2", "x3", "x4", "x5"), 
                class = "data.frame", 
                row.names = c(NA, -5L))

你的需求是保留那些x4值同时存在于2017和2018年的行,删除只在单一年份出现的x4对应的行(比如x4=1仅在2017年出现,需要删除)。下面提供两种常用的实现方式:

方法一:Base R 原生代码

不需要额外安装包,直接用基础函数处理:

# 统计每个x4值对应的年份出现次数
x4_year_counts <- table(df$x4)
# 筛选出同时在两年出现的x4值(次数为2)
valid_x4_values <- names(x4_year_counts)[x4_year_counts == 2]
# 保留符合条件的行
df_filtered_base <- df[df$x4 %in% valid_x4_values, ]

方法二:dplyr 包(更直观的管道式操作)

如果你习惯用tidyverse系列的包,dplyr的写法会更清晰:

library(dplyr)

df_filtered_dplyr <- df %>%
  group_by(x4) %>%  # 按x4分组
  filter(all(c(2017, 2018) %in% x5)) %>%  # 检查每组是否包含两个年份
  ungroup()  # 取消分组

两种方法得到的结果一致,最终的df_filtered_base或df_filtered_dplyr都会去掉x4=1的那一行,只保留x4=2和3的4条记录。

内容的提问来源于stack exchange,提问作者psysky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:45:56