根据几个条件创建一个新列

Create a new column based on several conditions

我想根据对多个列施加的某些条件创建一个新列。例如,这是一个示例数据集:

a <- data.frame(x=c(1,0,1,0,0), y=c(0,0,0,0,0), z=c(1,1,0,0,0))
a
  x y z
1 1 0 1
2 0 0 1
3 1 0 0
4 0 0 0
5 0 0 0

具体来说,如果存在任何特定的行 1,则新列 returns 1。如果全部为 0,则新列 returns 0。因此具有新列的数据集将会

  x y z w
1 1 0 1 1
2 0 0 1 1
3 1 0 0 1
4 0 0 0 0
5 0 0 0 0

我最初的想法是使用%in%但是无法得到我想要的结果。感谢您的帮助!

如果您的数据框由二进制值组成,例如,只有 01,您可以使用 rowSums

尝试下面的代码
a$w <- +(rowSums(a)>0)

这样

> a
  x y z w
1 1 0 1 1
2 0 0 1 1
3 1 0 0 1
4 0 0 0 0
5 0 0 0 0

您可以找到每行的 max :

a$w <- do.call(pmax, a)
a

#  x y z w
#1 1 0 1 1
#2 0 0 1 1
#3 1 0 0 1
#4 0 0 0 0
#5 0 0 0 0

这也可以用 apply 来完成:

a$w <- apply(a, 1, max)

我们可以使用 rowMaxs 来自 matrixStats

library(matrixStats)
a$w <- rowMaxs(as.matrix(a))
a$w
#[1] 1 1 1 0 0