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

在R语言中按first列分组筛选second列正负值匹配的行

在R语言中按分组筛选含对应正负值的行

需求说明

按first列分组,仅保留每个分组内second列中存在对应正负值的行(即某值的相反数也出现在该分组的second列中)。

示例输入数据

# 创建first列
first <- c(1,2,3,4,5,6,7,1,1,2)
# 创建second列
second <- c(88,52,-28,-19,39,86,-31,10,-88,-52)
df <- data.frame(first, second)

期望输出结果

data.frame(first=c(1,2,1,2), second=c(88,52,-88,-52))

解决方案

使用dplyr包可以高效实现该需求,以下是两种可行写法:

方法一:分步筛选分组与行

# 若未安装dplyr先执行:install.packages("dplyr")
library(dplyr)

df_filtered <- df %>%
  group_by(first) %>%
  # 先筛选出存在对应正负值的分组
  filter(any(-second %in% second)) %>%
  # 再筛选分组内有对应相反数的行
  filter(abs(second) %in% abs(second)[-second %in% second])

print(df_filtered)

方法二:利用绝对值重复特性

df_filtered <- df %>%
  group_by(first) %>%
  # 仅保留绝对值重复的行(正负值同时存在时绝对值才会重复)
  filter(abs(second) %in% abs(second)[duplicated(abs(second))])

print(df_filtered)

结果验证

运行代码后输出如下,与期望结果一致:

# A tibble: 4 × 2
# Groups:   first [2]
  first second
  <dbl>  <dbl>
1     1     88
2     2     52
3     1    -88
4     2    -52

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:53:06