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

R语言:删除cycle列重复且N列为0的数据行

问题描述

现有一个grouped_df类型的R数据框df,其中cycle列存在重复时间戳(比如第5-6行、第8-9行)。需要删除**cycle重复且对应N列为0**的行,保留cycle重复但N列非0的行;而cycle唯一且N=0的行则保留。

数据定义代码:

df <- structure(list(cycle = structure(c(1606782894, 1606786502, 1606790113, 
1606793721, 1606800941, 1606800941, 1606804550, 1606808160, 1606808160, 
1606845846), tzone = "UTC", class = c("POSIXct", "POSIXt")), 
    N = c(0L, 0L, 0L, 0L, 0L, 3L, 0L, 0L, 1L, 0L)), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L), groups = structure(list(
    cycle = structure(c(1606782894, 1606786502, 1606790113, 1606793721, 
    1606797332, 1606800941, 1606804550, 1606808160, 1606845846
    ), tzone = "UTC", class = c("POSIXct", "POSIXt")), .rows = structure(list(
        1L, 2L, 3L, 4L, 5L, 6L, 7L, 8:9, 10L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -9L), .drop = TRUE))

原始数据展示:

# A tibble: 10 × 2
# Groups:   cycle [9]
   cycle                  N
   <dttm>              <int>
 1 2020-12-01 00:34:54     0
 2 2020-12-01 01:35:02     0
 3 2020-12-01 02:35:13     0
 4 2020-12-01 03:35:21     0
 5 2020-12-01 05:35:41     0
 6 2020-12-01 05:35:41     3
 7 2020-12-01 06:35:50     0
 8 2020-12-01 07:36:00     0
 9 2020-12-01 07:36:00     1
10 2020-12-01 18:04:06     0
解决方法

dplyr实现(推荐)

利用dplyr的分组筛选功能,按cycle分组后,保留满足以下任一条件的行:

  • N不为0;
  • 该组只有一行(即cycle唯一)且N为0。

代码:

library(dplyr)

df_cleaned <- df %>%
  group_by(cycle) %>%
  filter(N != 0 | n() == 1) %>%
  ungroup() # 可选,若不需要保留分组结构可取消

基础R实现

如果不想依赖dplyr,可以用基础R逻辑处理:

# 计算每个cycle的出现次数
cycle_counts <- table(df$cycle)

# 筛选符合条件的行
df_cleaned_base <- df[df$N != 0 | (df$N == 0 & cycle_counts[as.character(df$cycle)] == 1), ]
验证结果

运行上述代码后,清理后的数据如下:

# A tibble: 8 × 2
  cycle                  N
  <dttm>              <int>
1 2020-12-01 00:34:54     0
2 2020-12-01 01:35:02     0
3 2020-12-01 02:35:13     0
4 2020-12-01 03:35:21     0
5 2020-12-01 05:35:41     3
6 2020-12-01 06:35:50     0
7 2020-12-01 07:36:00     1
8 2020-12-01 18:04:06     0

可以看到,原数据中第5行、第8行(均为cycle重复且N=0)已被删除,对应N≠0的重复行被保留,所有cycle唯一且N=0的行也全部保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:30:50