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

如何在R中将每行首次出现1之后的所有值设为NA

R实现每行首次出现1后的值转为NA

基础R方案

直接使用apply()逐行处理,自定义函数定位每行第一个1的位置,将后续元素替换为NA:

# 构建原始数据
T1 <- c(0,0,0,0,0)
T2 <- c(1,0,0,0,0)
T3 <- c(0,1,0,0,0)
T4 <- c(1,1,0,NA,1)
T5 <- c(0,1,0,NA,0)
df <- data.frame(T1,T2,T3,T4,T5)

# 定义行处理函数
process_row <- function(row) {
  # 定位第一个1的位置(自动忽略NA)
  first_one <- which(row == 1)[1]
  # 若存在1,将后续元素设为NA
  if (!is.na(first_one)) {
    row[(first_one + 1):length(row)] <- NA
  }
  return(row)
}

# 应用到所有行并转换回数据框
df_processed <- as.data.frame(t(apply(df, 1, process_row)))
colnames(df_processed) <- colnames(df)

# 查看结果
df_processed

Tidyverse方案(dplyr + purrr)

如果习惯使用tidyverse工具链,可结合pmap_dfr()实现行级操作:

library(dplyr)
library(purrr)

df_processed <- df %>%
  pmap_dfr(function(...) {
    row <- c(...)
    first_one <- which(row == 1)[1]
    if (!is.na(first_one)) {
      row[(first_one + 1):length(row)] <- NA
    }
    as.data.frame(t(row))
  })

colnames(df_processed) <- colnames(df)

说明

  • 函数会自动忽略行中的NA值,仅识别第一个明确的1
  • 对于没有出现1的行(如示例第3行),保持原数据不变
  • 处理后的结果与需求完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:20:50