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

如何在R语言中实现数据集行重复及指定列值修改

解决方案

你可以通过以下两种方法实现需求:

方法一:先重复行再修改列值

利用dplyr的slice先完成行重复,再通过行位置判断修改指定列:

library(dplyr)

# 加载原始数据
dat <- read.table(text=" ID  GO  Class   N1  L1  K1
1   1   01-03   0   3   4
2   3   01-03   0   3   6
3   2   01-03   0   5   5
4   5   01-03   0   2   1
1   6   01-03   0   1   1
", header=TRUE)

# 生成目标数据集
result <- dat %>%
  slice(rep(1:n(), each = 2)) %>%
  mutate(
    Class = ifelse(row_number() %% 2 == 0, "0", Class),
    N1 = ifelse(row_number() %% 2 == 0, 1, N1),
    L1 = ifelse(row_number() %% 2 == 0, NA, L1),
    K1 = ifelse(row_number() %% 2 == 0, NA, K1)
  )

# 查看结果
print(result)

代码说明

  • slice(rep(1:n(), each = 2)):将每行重复2次,得到原行+复制行的基础结构
  • row_number() %% 2 == 0:判断是否为复制出来的偶数行,对这类行的指定列进行赋值修改
  • 若你的Class列需要数值型的0,去掉引号即可

运行后输出与预期一致:

ID GO Class N1 L1 K1
1   1  1 01-03  0  3  4
2   1  1     0  1 NA NA
3   2  3 01-03  0  3  6
4   2  3     0  1 NA NA
5   3  2 01-03  0  5  5
6   3  2     0  1 NA NA
7   4  5 01-03  0  2  1
8   4  5     0  1 NA NA
9   1  6 01-03  0  1  1
10  1  6     0  1 NA NA

方法二:构造新行再合并

先提取原数据的ID和GO列构造新行,再与原数据合并后排序:

library(dplyr)

# 构造新行
new_rows <- dat %>%
  select(ID, GO) %>%
  mutate(Class = "0", N1 = 1, L1 = NA, K1 = NA)

# 合并并排序,保证原行在前、新行在后
result <- bind_rows(dat, new_rows) %>%
  arrange(ID, GO, desc(Class))

这种方式逻辑更直观,适合需要明确拆分步骤的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:30:31