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

如何在R数据框每行后添加含反转is_severe的自定义新行?

解决R数据框按规则添加新行的问题

原始数据

先定义你的原始数据框:

df <- data.frame(
  X = c(0, 2),
  snp_id = c("GL000191.1-37698", "GL000191.1-37922"),
  is_severe = c(0, 1),
  encoding_1 = c(0, 1),
  encoding_2 = c(1, 0),
  encoding_0 = c(7, 12)
)

解决方案

提供两种实现方式,按需选择:

方法一:Base R 实现

# 构造新行数据框
new_rows <- df[, c("X", "snp_id")]
new_rows$is_severe <- abs(df$is_severe - 1)  # 快速实现0和1取反
new_rows$encoding_1 <- 0
new_rows$encoding_2 <- 0
new_rows$encoding_0 <- ifelse(new_rows$is_severe == 0, 8, 13)

# 合并原始行与新行,按原始顺序排列后重置X序号
result <- rbind(df, new_rows)[order(df$X), ]
result$X <- seq(nrow(result))

# 查看结果
print(result)

方法二:dplyr(Tidyverse)实现

如果习惯使用tidyverse工具链,可使用以下代码:

library(dplyr)

result <- df %>%
  rowwise() %>%
  group_map(~ {
    # 构造当前行对应的新行
    new_row <- tibble(
      X = .x$X,
      snp_id = .x$snp_id,
      is_severe = abs(.x$is_severe - 1),
      encoding_1 = 0,
      encoding_2 = 0,
      encoding_0 = ifelse(abs(.x$is_severe - 1) == 0, 8, 13)
    )
    # 合并当前行与新行
    bind_rows(.x, new_row)
  }) %>%
  bind_rows() %>%
  # 重置X为连续序号
  mutate(X = row_number())

# 查看结果
print(result)

最终输出

两种方法都会得到符合需求的结果:

X            snp_id is_severe encoding_1 encoding_2 encoding_0
1 1 GL000191.1-37698         0          0          1          7
2 2 GL000191.1-37698         1          0          0         13
3 3 GL000191.1-37922         1          1          0         12
4 4 GL000191.1-37922         0          0          0          8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:06:01