如何基于time列删除data.frame指定列的对应值(R语言)
条件性将指定列值置为NA的实现方法(base R & dplyr)
针对名为sample的data.frame,需实现以下规则:
- 当
time列取值为"3"时,将endogenous_ct_01列对应值设为NA - 当
time列取值为"1"时,将endogenous_ct_03列对应值设为NA
base R 实现
直接通过逻辑索引定位目标行后赋值,无需额外依赖,高效直观:
# 处理endogenous_ct_01列 sample$endogenous_ct_01[sample$time == "3"] <- NA # 处理endogenous_ct_03列 sample$endogenous_ct_03[sample$time == "1"] <- NA
dplyr 实现
适合管道流操作,两种写法各有侧重:
写法1:使用case_when(适配多条件场景)
library(dplyr) sample <- sample %>% mutate( endogenous_ct_01 = case_when( time == "3" ~ NA_real_, # 若列是字符型,替换为NA_character_ TRUE ~ endogenous_ct_01 ), endogenous_ct_03 = case_when( time == "1" ~ NA_real_, TRUE ~ endogenous_ct_03 ) )
写法2:使用ifelse(单条件下更简洁)
library(dplyr) sample <- sample %>% mutate( endogenous_ct_01 = ifelse(time == "3", NA, endogenous_ct_01), endogenous_ct_03 = ifelse(time == "1", NA, endogenous_ct_03) )
内容的提问来源于stack exchange,提问作者Javier Hernando
相关产品推荐
相关产品推荐

