OR条件如何在R中起作用?

问题描述 投票:2回答:3

这可能是一个非常基本的问题。但我无法找出解决方案。所以,我有3个变量叫做xyz

x<-c(0,0,1,1)
y<-c(21,0,3,NA)
z<-c(10,15,NA,12)
d<-data.frame(x,y,z)

现在我想创建一个变量,如果满足以下三个条件中的任何一个,则取值为1x>1y>=8z<=8。否则我希望它是0,只有当所有变量都缺少值时我才想要NA。以下代码

d$a <- ifelse(d$x>1 | d$y>=8 | d$z<=8, 1, 
ifelse(is.na(d$x)==T & is.na(d$y)==T & is.na(d$z)==T, NA, 0))

给我吗:

> d
  x  y  z  a
1 0 21 10  1
2 0  0 15  0
3 1  3 NA NA
4 1 NA 12 NA

但我的预期产量是1, 0, 0, 0a。那么我应该如何正确编码呢?

r condition
3个回答
4
投票

pmax是你的朋友:

pmax(d$x > 1, d$y >= 8, d$z <= 8, na.rm=TRUE)
#[1] 1 0 0 0

3
投票

在检查实际列值之前,应检查NOT NA。一个选项可以是使用as

d$a <- ifelse(is.na(x) & is.na(y) & is.na(z), NA,
              ifelse( (!is.na(x) & d$x>1) | (!is.na(y) & d$y>=8) | 
                      (!is.na(z) & d$z<=8), 1, 0))

d
#  x  y  z a
#1 0 21 10 1
#2 0  0 15 0
#3 1  3 NA 0
#4 1 NA 12 0

3
投票

解决方案:不要使用ifelse

d$a <- 0
d$a[d$x>1 | d$y>=8 | d$z<=8] <- 1 ## subscript assigns only work for TRUE
d$a[is.na(d$x)==T & is.na(d$y)==T & is.na(d$z)==T] <- NA
© www.soinside.com 2019 - 2024. All rights reserved.