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

如何将dmm包的sheep.df数据集最后三列拆分为带序号的多行?

R语言sheep.df数据集行拆分实现方案

你需要完成的是将每行末尾3个数值拆分为独立行、新增1/2/3序号列的宽转长操作,以下是两种可直接运行的实现方法:

方法1:tidyverse实现(代码简洁易维护)

# 加载依赖包与数据集
library(dmm)
library(tidyverse)
data(sheep.df)

# 执行格式转换
sheep_result <- sheep.df %>%
  # 将最后3列转为长表,丢弃原有列名
  pivot_longer(cols = last_col(2):last_col(),
               names_to = NULL,
               values_to = "拆分数值") %>%
  # 按原行分组生成1/2/3序号
  group_by(across(-`拆分数值`)) %>%
  mutate(序号 = row_number()) %>%
  ungroup() %>%
  # 调整列顺序,序号放在最左侧
  select(序号, everything())

如果你的数据集列顺序有变动,可将last_col(2):last_col()替换为待拆分的3个列的实际名称,例如c(colA, colB, colC)。

方法2:base R实现(无需额外安装第三方包)

# 加载数据集
library(dmm)
data(sheep.df)

col_total <- ncol(sheep.df)
# 提取不需要拆分的固定列
fixed_part <- sheep.df[, 1:(col_total - 3)]
# 提取待拆分的末尾3列
value_part <- sheep.df[, (col_total - 2):col_total]

# 固定列每一行重复3次,对应3个拆分值
fixed_repeated <- fixed_part[rep(1:nrow(fixed_part), each = 3), ]
# 待拆分数值按行展开为一维向量
value_vector <- as.vector(t(value_part))
# 生成1/2/3循环的序号列
seq_column <- rep(1:3, times = nrow(sheep.df))

# 合并生成最终数据集
sheep_result <- cbind(序号 = seq_column, fixed_repeated, 拆分数值 = value_vector)

转换完成后可运行head(sheep_result, 9)查看前3条原始记录对应的9条转换结果,确认逻辑符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:39:00