繁体   English   中英

如何根据 r dplyr 中的两个条件将值替换为 NA?

[英]How to replace a value with NA based on two conditions in r dplyr?

我需要根据另外两列的条件用 NA 替换数值。

这是我的可重现示例:

library(dplyr)

data1 <- read.csv(text = "
  site,day,biomass,aereal,root,ei.obs
  siteA,50,464.65,2020.3,307.3,0.84
  siteA,NA,NA,NA,NA,NA
  siteA,NA,NA,NA,NA,NA
  siteA,59,1222.565,2159.5,148.3,0.93
  siteA,NA,NA,NA,NA,NA
  siteA,NA,NA,NA,NA,NA
  siteA,66,1250.86,2046.8,159.1,0.92
  siteB,50,464.65,2020.3,307.3,0.84
  siteB,NA,NA,NA,NA,NA
  siteB,NA,NA,NA,NA,NA
  siteB,59,1222.565,2159.5,148.3,0.93
  siteB,NA,NA,NA,NA,NA
  siteB,NA,NA,NA,NA,NA
  siteB,66,1250.86,2046.8,159.1,0.92")


data1.1 <- data1 %>% 
  mutate(ei.obs =  if_else(site == "siteA" & day == 66, NA , ei.obs)) 

这是我得到的错误:

Error: Problem with `mutate()` input `ei.obs`.
x `false` must be a logical vector, not a double vector.
i Input `ei.obs` is `if_else(site == "siteA" & day == 66, NA, ei.obs)`.

或者,我试过这个:

data1.1 <- data1 %>% 
  mutate(ei.obs =  na_if(ei.obs, site == "siteA" & day == 66)) 

但是 dataframe 没有任何变化。

预期的结果是这样的:

在此处输入图像描述

简单的解决方案是使用ifelse而不是if_else

library(dplyr)
data1.1 <- data1 %>% mutate(ei.obs =  ifelse(site == "siteA" & day == 66, NA , ei.obs))

if_else需要相同类型的 output。 NA是 class 逻辑所以你得到错误,你可以使用NA_real代替。

library(dplyr)
data1.1 <- data1 %>% mutate(ei.obs =  if_else(site == "siteA" & day == 66, NA_real_, ei.obs))

顺便说一句,复制数据会在site列中创建空白,您可以使用trimws将其删除。

data1$site <- trimws(data1$site)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM