R语言如何筛选data.frame中V6列值恰好出现2次的行
R语言筛选data.frame中V6列取值恰好出现2次的所有行

原有代码逻辑缺陷
duplicated(V6)仅会标记V6列中非首次出现的重复值,既无法统计每个取值的总出现频次,也会漏掉每个重复值第一次出现的行,无法满足“取值恰好出现2次时保留全部对应行”的筛选要求。
可直接运行的实现方案
方案1:dplyr 写法(适配你已加载的包)
两种写法逻辑一致,都是先按V6分组统计每个值的出现次数,再保留次数等于2的行:
library(dplyr) df <- as.data.frame(date) # 写法1:add_count 快速添加频数列 df1 <- df %>% add_count(V6, name = "freq") %>% filter(freq == 2) %>% select(-freq) # 移除临时生成的频数列即可 # 写法2:group_by + filter 直接分组判断 df1 <- df %>% group_by(V6) %>% filter(n() == 2) %>% ungroup()
方案2:Base R 写法(无需加载第三方包)
用R基础自带的table()函数统计频次,再做匹配筛选即可:
# 提取所有恰好出现2次的V6取值 target_values <- names(which(table(df$V6) == 2)) # 子集筛选对应行 df1 <- df[df$V6 %in% target_values, ]
内容的提问来源于stack exchange,提问作者Daisy
相关产品推荐
相关产品推荐

