根据几个条件创建一个新列
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%
但是无法得到我想要的结果。感谢您的帮助!
如果您的数据框由二进制值组成,例如,只有 0
和 1
,您可以使用 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
我想根据对多个列施加的某些条件创建一个新列。例如,这是一个示例数据集:
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%
但是无法得到我想要的结果。感谢您的帮助!
如果您的数据框由二进制值组成,例如,只有 0
和 1
,您可以使用 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