如何转换或移除DataFrame中超出条数限制的重复个体行
解决方案
优先方案:滑动窗口拆分多条目个体
针对需求,用dplyr结合purrr实现滑动窗口式拆分,生成每个5行的连续子组并重命名Name列:
library(dplyr) library(purrr) # 定义分组处理函数 process_group <- function(df) { row_count <- nrow(df) if (row_count <= 5) { # 条目数≤5的分组直接返回 return(df) } else { # 计算滑动窗口组数:总条目数-5+1 group_count <- row_count - 5 + 1 # 生成每个窗口的子数据框并重命名 map_dfr(1:group_count, function(idx) { sub_df <- df[idx:(idx+4), ] sub_df$Name <- paste0(sub_df$Name[1], idx) sub_df }) } } # 按Name分组处理数据 final_result <- data2 %>% group_by(Name) %>% group_modify(process_group) %>% ungroup() # 查看输出 print(final_result)
这段代码的作用:
- 对每个
Name分组单独处理 - 条目数≤5的分组(如Benny、Mylo)直接保留原数据
- 条目数>5的分组(如Peter)生成连续的5行滑动窗口子组,
Name后追加组号,正好生成3组,完全匹配你期望的输出格式
退而求其次:保留前5条数据
若不需要拆分,仅保留每个个体的前5条数据,代码更简洁:
library(dplyr) simple_result <- data2 %>% group_by(Name) %>% slice_head(n = 5) %>% ungroup() print(simple_result)
补充说明
- 两个方案都会保留原DataFrame的所有列(包括你省略的其他列)
- 后续可自行处理Mylo的条目,比如用
filter(Name != "Mylo Thony")移除
内容的提问来源于stack exchange,提问作者monamona
相关产品推荐
相关产品推荐

