首页 > 解决方案 > 有条件地用 NA 替换列

问题描述

这是我的数据示例:

m <- data.frame(swim = c(0,1,0,0), time1 = c(1,2,3,4), time2 = c(2,3,4,5))

我想用 in 所在的行之后替换列 time1 和 time2 中的所有NA数字。它应该如下所示:1m$swim

n <- data.frame(swim = c(0,1,0,0), time1 = c(1,2,NA,NA), time2 = c(2,3,NA,NA))

Thank you!

标签: rdplyr

解决方案


dplyr可以这样做:

library(dplyr)
m %>%
  mutate(across(starts_with('time'), 
           ~replace(., row_number() > match(1, swim), NA)))

但是,基本 R 选项会更有效。

cols <- grep('time', names(m))
inds <- match(1, m$swim)
m[(inds + 1):nrow(m), cols] <- NA
m
#  swim time1 time2
#1    0     1     2
#2    1     2     3
#3    0    NA    NA
#4    0    NA    NA

推荐阅读