R 跨多个变量使用mutate on逻辑条件创建新变量-mutate?

R 跨多个变量使用mutate on逻辑条件创建新变量-mutate?,r,dplyr,R,Dplyr,mutate是否可以基于跨变量应用的逻辑条件创建新变量? 更具体地,考虑下面的数据。 set.seed(1234) val <- c(rep(0, 20), 1) a <- sample(val, 50, replace=T) b <- sample(val, 50, replace=T) c <- sample(val, 50, replace=T) d <- sample(val, 50, replace=T) dat <- data.frame(a,b,

mutate
是否可以基于跨变量应用的逻辑条件创建新变量?
更具体地,考虑下面的数据。

set.seed(1234)
val <- c(rep(0, 20), 1)
a <- sample(val, 50, replace=T)
b <- sample(val, 50, replace=T)
c <- sample(val, 50, replace=T)
d <- sample(val, 50, replace=T)
dat <- data.frame(a,b,c,d)
set.seed(1234)

val一如既往,最佳答案取决于具体问题

例如,在这种情况下,您可以使用
pmax()

而且,如果您非常确定数据是二进制的,那么可以使用
rowSums()

dat$anyABCD=1)
主管(dat)
a、b、c、d、anyABCD
1 0 0 0 0       0
2 0 0 0 0       0
3 0 0 0 0       0
4 0 0 0 0       0
5 0 0 0 0       0
6 0 0 0 1       1

完美。额外的例子也特别有用。看来在这种情况下,mutate不是最佳解决方案!
new.dat <- mutate(dat, anyABCD == ifelse(A or B or C or D == 1, 1, 0))
dat$anyABCD <-  with(dat, pmax(a, b, c, d) == 1)

head(dat)
  a b c d anyABCD
1 0 0 0 0   FALSE
2 0 0 0 0   FALSE
3 0 0 0 0   FALSE
4 0 0 0 0   FALSE
5 0 0 0 0   FALSE
6 0 0 0 1    TRUE
dat$anyABCD <- apply(dat[, 1:4], 1, function(x)max(x) == 1)
head(dat)

  a b c d anyABCD
1 0 0 0 0   FALSE
2 0 0 0 0   FALSE
3 0 0 0 0   FALSE
4 0 0 0 0   FALSE
5 0 0 0 0   FALSE
6 0 0 0 1    TRUE
dat$anyABCD <- rowSums(dat[, 1:4] >= 1)

head(dat)
  a b c d anyABCD
1 0 0 0 0       0
2 0 0 0 0       0
3 0 0 0 0       0
4 0 0 0 0       0
5 0 0 0 0       0
6 0 0 0 1       1