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

如何在R语言中筛选model、country、year相同但factor不同的数据行?

筛选DataFrame中model、country、year相同但factor不同的行

我们需要从给定的R语言DataFrame中,筛选出model、country、year取值完全一致,但factor取值不同的数据行。

原始数据与代码

model <- c("A","B","C","A","A","C","B","A")
country <- c("Italy","Germany","Norway","Italy","France","Germany","Norway","Italy")
year <- c(2016,2016,2016,2016,2015,2015,2015,2015)
value <-  c(14,24,11,34,73,11,33,22)
factor <- c("NEW","OLD","OLD","OLD","OLD","OLD","NEW","NEW")

df <- data.frame(model,country,year,value, factor)

生成的原始DataFrame:

model country year value factor
1     A   Italy 2016    14    NEW
2     B Germany 2016    24    OLD
3     C  Norway 2016    11    OLD
4     A   Italy 2016    34    OLD
5     A  France 2015    73    OLD
6     C Germany 2015    11    OLD
7     B  Norway 2015    33    NEW
8     A   Italy 2015    22    NEW

解决方案

方法1:使用dplyr包

通过分组后筛选出组内factor存在多种取值的行:

library(dplyr)

result <- df %>%
  group_by(model, country, year) %>%
  filter(n_distinct(factor) > 1) %>%
  ungroup()

print(result)

方法2:Base R实现

通过构造分组键,统计每组的factor唯一值数量,再筛选目标组:

# 构造分组键
group_key <- with(df, paste(model, country, year, sep = "_"))
# 统计每组factor的唯一值数量
factor_unique_counts <- tapply(df$factor, group_key, function(x) length(unique(x)))
# 筛选出factor有多种取值的组
target_groups <- names(factor_unique_counts[factor_unique_counts > 1])

# 提取目标行
result <- df[group_key %in% target_groups, ]
print(result)

输出结果

model country year value factor
1     A   Italy 2016    14    NEW
4     A   Italy 2016    34    OLD

注:你提供的期望输出中value为22的行(原始数据第8行)对应的year是2015年,与另一行的2016年不一致,不符合筛选条件,正确符合要求的结果如上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:33:30