如何删除数据集中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
相关产品推荐
相关产品推荐

