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

如何编写if语句输出R dataframe中重复Peptide对应的整行数据

解决思路及实现代码

问题根源

你当前代码仅输出Peptide列的原因是赋值时仅提取了dataframe$Peptide[i]单列值,同时循环逻辑存在边界溢出问题(i遍历到最后一行时i+1超出数据行数),且for循环遍历6万行数据效率极低。

最优实现方案(基础R单行代码搞定,效率最高)

核心逻辑:通过duplicated()函数标记所有出现过至少2次的Peptide对应的所有行,直接筛选即可:

# 只要Peptide出现次数≥2,对应的所有行都会被保留
new_res <- dataframe[duplicated(dataframe$Peptide) | duplicated(dataframe$Peptide, fromLast = TRUE), ]

运行后new_res就是你需要的包含完整行的结果。

如果你要修改原有for循环(不推荐,效率低)

将存储结构改为data.frame,赋值时取整行,同时规避边界问题:

new_res <- data.frame()
# 循环到倒数第一行就停止,避免i+1越界
for (i in 1:(nrow(dataframe)-1)) {
  if(isTRUE(dataframe$Peptide[i+1] == dataframe$Peptide[i])) {
    # 避免同一行被重复添加
    if (!i %in% rownames(new_res)) {
      new_res <- rbind(new_res, dataframe[i, ])
    }
    if (!(i+1) %in% rownames(new_res)) {
      new_res <- rbind(new_res, dataframe[i+1, ])
    }
  }
}

tidyverse风格实现(可读性高)

如果你习惯用dplyr处理数据,可以用分组过滤的逻辑:

library(dplyr)
new_res <- dataframe %>%
  group_by(Peptide) %>%
  filter(n() >= 2) %>% # 保留Peptide出现次数≥2的所有行
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:15:04