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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:05:06