如何在R中按条件拆分行并均分指定列值、复制其余列
在R中拆分数据集行并均分列值
方法1:使用tidyverse工具链
加载dplyr和tidyr包,通过构造列表列再展开的方式实现需求:
library(dplyr) library(tidyr) df <- data.frame(ID = c("A","B","C"), class = c(2,4,6), value = c(100,150,100)) df_result <- df %>% mutate( class = map(class, ~c(.x - 1, .x)), # 生成拆分后的class值列表 value = map(value, ~c(.x/2, .x/2)) # 生成均分后的value值列表 ) %>% unnest(cols = c(class, value)) # 展开列表列 print(df_result)
方法2:使用基础R实现
无需额外包,通过重复行索引并计算对应列值完成:
df <- data.frame(ID = c("A","B","C"), class = c(2,4,6), value = c(100,150,100)) # 生成重复两次的行索引 idx <- rep(seq(nrow(df)), each = 2) df_result <- df[idx, ] # 更新class列:奇数行取原class-1,偶数行保留原class df_result$class <- ifelse(seq(nrow(df_result)) %% 2 == 1, df_result$class - 1, df_result$class) # 均分value列 df_result$value <- df_result$value / 2 print(df_result)
两种方法最终都会得到目标结果:
ID class value 1 A 1 50 2 A 2 50 3 B 3 75 4 B 4 75 5 C 5 50 6 C 6 50
内容的提问来源于stack exchange,提问作者starski
相关产品推荐
相关产品推荐

