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

如何基于文本文件两列生成新列?附R代码排障请求

修复R代码生成splicing列的问题

先明确你的需求:给包含exons和affected_exon列的数据集新增splicing列,规则如下:

  • 当affected_exon = 1时赋值为first
  • 当affected_exon = exons时赋值为last
  • 当1 < affected_exon < exons时赋值为middle

你的现有代码没达到预期,问题主要出在这几个地方:

1. 循环逻辑完全错误

你写的for (i in out)是在遍历数据框的列,而不是逐行处理数据,这和你需要逐行判断的需求完全不匹配。应该遍历数据框的行索引,比如for (i in 1:nrow(out))。

2. 变量赋值方式错误

你用cluster <- c("last")这种写法,每次循环都会把整个cluster变量替换成单个字符串,而不是给对应行的位置赋值。而且原数据里根本没有group列,cluster <- out$group这行完全是多余的,应该直接操作新的splicing列。

3. 未针对单行数据做判断

你的条件scans == exon是对整个向量做比较,不是针对第i行的exons和affected_exon值,这样根本无法实现逐行的逻辑判断。


修正后的Base R代码(循环版本)

# 读取数据
out <- read.delim("out.txt", sep = "\t", header = TRUE)

# 初始化splicing列,先设为默认值
out$splicing <- NA

# 逐行遍历判断
for (i in 1:nrow(out)) {
  exons_val <- out$exons[i]
  affected_val <- out$affected_exon[i]
  
  if (affected_val == 1) {
    out$splicing[i] <- "first"
  } else if (affected_val == exons_val) {
    out$splicing[i] <- "last"
  } else if (affected_val > 1 && affected_val < exons_val) {
    out$splicing[i] <- "middle"
  }
}

# 查看结果
print(out)

更高效的向量化实现(推荐)

在R里尽量避免循环,用向量化操作更简洁高效,这里提供两种常用方式:

方法1:Base R嵌套ifelse

out <- read.delim("out.txt", sep = "\t", header = TRUE)

out$splicing <- ifelse(out$affected_exon == 1, "first",
                       ifelse(out$affected_exon == out$exons, "last",
                              ifelse(out$affected_exon > 1 & out$affected_exon < out$exons, "middle", NA)))

方法2:dplyr包(逻辑更清晰)

如果你已经安装了dplyr包,用case_when写出来的逻辑可读性更强:

library(dplyr)

out <- read.delim("out.txt", sep = "\t", header = TRUE) %>%
  mutate(splicing = case_when(
    affected_exon == 1 ~ "first",
    affected_exon == exons ~ "last",
    between(affected_exon, 2, exons - 1) ~ "middle",
    TRUE ~ NA_character_ # 处理其他异常情况
  ))

运行以上任意一种方法,都会得到你预期的结果:

exons affected_exon splicing
1    24            22    middle
2    37             7    middle
3    14            14      last
4    33             1     first

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:39:29