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

如何按STAND分组截取数据框前182行,统一各组行数?

需求说明

对数据框ds按STAND字段分组,截取每组的前182行数据,使所有分组行数统一为182行;对于行数超过182的分组(如GUABIJU_017B、GUAJUVIRAII_002A等),直接丢弃多余行。

当前数据分组行数情况

加载数据后,通过table(ds$STAND)可查看部分分组行数超标:

# 加载包
library(dplyr)

# 读取数据
ds <- read.csv("https://raw.githubusercontent.com/Leprechault/trash/main/my_ts_data.csv")
table(ds$STAND)
#          ALCINA_001A        ALDOSANI_031A        AROEIRAB_017A    ARROIOXAVIER_012A    ARROIOXAVIER_027B 
#                  182                  182                  182                  182                  182 
#       AZAMBUJAI_001A       AZAMBUJAI_018A      BARBANEGRA_404F       BARRONDAO_026A        BOAVISTA_019A 
#                  182                  182                  182                  364                  182 
#      BOMRECREIO_010A         CAMBARA_014A     CANAFISTULA_046A     CERRODACRUZ_013D         CHACARA_002A 
#                  182                  182                 2548                  182                  182 
#     CORDILHEIRA_004B   COXILHADOROSA_006B     CUENTRILHOI_019D     CUENTRILHOI_028A     CUENTRILHOI_040A 
#                  182                  182                  182                  182                  182 
#      DOISIRMAOS_001A    ESTRADAREALI_006A       FIGUEIRAS_012A          FOLLES_002A          FOLLES_011A 
#                  182                  182                  546                  182                  182 
#         GRAXAIM_002A         GUABIJU_007C         GUABIJU_010C         GUABIJU_011B         GUABIJU_016B 
#                  182                  182                  182                  182                  182 
#         GUABIJU_017B     GUAJUVIRAII_002A    MONTECASTELO_035A    MONTECASTELO_050B    PANTERANEGRA_006F 
#                  364                  728                  182                  182                  182 
#         PARAISO_035D         PARAISO_041A       PARAISOII_029A PASSODAESTANCIA_002A       PINHEIROS_040A 
#                  182                  182                  364                  182                  182 
#   PONTADASCANAS_021D        QUITERIA_225A           RAMOS_003B           RAMOS_014A     RANCHOVELHO_004A 
#                  182                  182                  182                  182                  182 
# RINCAODOSSOARES_004A RINCAODOSSOARES_005D RINCAODOSSOARES_015E      SANTAROSAI_026A         SAOBRAS_004B 
#                  182                  364                  546                  182                  182 
#         SAOJOAO_004A        SONHOMEU_004A      TAQUAREMBO_003F    TAQUAREMBOII_002A       TERRADURA_033B 
#                  182                  182                  182                  182                  182 
#         VACACAI_009D      VENDAVELHA_014B       VILAPALMA_012B       VILAPALMA_025A       VILAPALMA_026A 
#                  182                  182                  182                  182                  182 
#       VILAPALMA_030A       VILAPALMA_030C       VILAPALMA_033C       VILAPALMA_033K 
#                  182                  182                  182                  182 

期望输出

所有STAND分组行数均为182:

table(ds$STAND)
#          ALCINA_001A        ALDOSANI_031A        AROEIRAB_017A    ARROIOXAVIER_012A    ARROIOXAVIER_027B 
#                  182                  182                  182                  182                  182 
#       AZAMBUJAI_001A       AZAMBUJAI_018A      BARBANEGRA_404F       BARRONDAO_026A        BOAVISTA_019A 
#                  182                  182                  182                  182                  182 
#      BOMRECREIO_010A         CAMBARA_014A     CANAFISTULA_046A     CERRODACRUZ_013D         CHACARA_002A 
#                  182                  182                 182                  182                  182 
#     CORDILHEIRA_004B   COXILHADOROSA_006B     CUENTRILHOI_019D     CUENTRILHOI_028A     CUENTRILHOI_040A 
#                  182                  182                  182                  182                  182 
#      DOISIRMAOS_001A    ESTRADAREALI_006A       FIGUEIRAS_012A          FOLLES_002A          FOLLES_011A 
#                  182                  182                  182                  182                  182 
#         GRAXAIM_002A         GUABIJU_007C         GUABIJU_010C         GUABIJU_011B         GUABIJU_016B 
#                  182                  182                  182                  182                  182 
#         GUABIJU_017B     GUAJUVIRAII_002A    MONTECASTELO_035A    MONTECASTELO_050B    PANTERANEGRA_006F 
#                  182                  182                  182                  182                  182 
#         PARAISO_035D         PARAISO_041A       PARAISOII_029A PASSODAESTANCIA_002A       PINHEIROS_040A 
#                  182                  182                  182                  182                  182 
#   PONTADASCANAS_021D        QUITERIA_225A           RAMOS_003B           RAMOS_014A     RANCHOVELHO_004A 
#                  182                  182                  182                  182                  182 
# RINCAODOSSOARES_004A RINCAODOSSOARES_005D RINCAODOSSOARES_015E      SANTAROSAI_026A         SAOBRAS_004B 
#                  182                  182                  182                  182                  182 
#         SAOJOAO_004A        SONHOMEU_004A      TAQUAREMBO_003F    TAQUAREMBOII_002A       TERRADURA_033B 
#                  182                  182                  182                  182                  182 
#         VACACAI_009D      VENDAVELHA_014B       VILAPALMA_012B       VILAPALMA_025A       VILAPALMA_026A 
#                  182                  182                  182                  182                  182 
#       VILAPALMA_030A       VILAPALMA_030C       VILAPALMA_033C       VILAPALMA_033K 
#                  182                  182                  182                  182 

解决方案

使用dplyr的分组与行截取函数即可实现需求,以下两种方法任选其一:

方法1:使用slice_head()(直观指定截取行数)

library(dplyr)

# 读取数据
ds <- read.csv("https://raw.githubusercontent.com/Leprechault/trash/main/my_ts_data.csv")

# 分组后截取每组前182行
ds_trimmed <- ds %>%
  group_by(STAND) %>%
  slice_head(n = 182) %>%
  ungroup()

# 验证结果
table(ds_trimmed$STAND)

方法2:使用slice()(指定行索引范围)

ds_trimmed <- ds %>%
  group_by(STAND) %>%
  slice(1:182) %>%
  ungroup()

# 验证结果
table(ds_trimmed$STAND)

两种方法均能将所有STAND分组的行数统一为182行,自动丢弃分组内多余的行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:07:03