R 如何使用带条件的行和返回二进制值?

R 如何使用带条件的行和返回二进制值?,r,R,假设我有一个数据框,其中有一列用于求和数据。如果列a、b或c中的任何值不为零,那么在新列中返回二进制0或1的最有效方法是什么rowSums可以作为总数,但如果与值有任何不同,我还需要一个简单的指示符 tt <- data.frame(a=c(0,-5,0,0), b=c(0,5,10,0), c=c(-5,0,0,0)) tt[, ncol(tt)+1] <- rowSums(tt) 第四列是前三列数据的简单总和。如果任何值与前三列上设置的条件不同,如何添加第五列以返回二进制1/0

假设我有一个数据框,其中有一列用于求和数据。如果列a、b或c中的任何值不为零,那么在新列中返回二进制0或1的最有效方法是什么
rowSums
可以作为总数,但如果与值有任何不同,我还需要一个简单的指示符

tt <- data.frame(a=c(0,-5,0,0), b=c(0,5,10,0), c=c(-5,0,0,0))
tt[, ncol(tt)+1] <- rowSums(tt)
第四列是前三列数据的简单总和。如果任何值与前三列上设置的条件不同,如何添加第五列以返回二进制1/0值

例如,如果a、b或c中的任何一个不是0,是否有简单的方法返回1

as.numeric(rowSums(tt != 0) > 0)
# [1] 1 1 1 0
tt!=0
给出了一个逻辑矩阵,告诉我们在tt中哪里有不等于零的值

当每行的和大于零(
rowSums(tt!=0)>0)
时,我们知道该行中至少有一个值不是零


然后我们将结果转换为数值(
as.numeric(.)
),我们得到了一个二进制向量结果。

我们可以使用
Reduce

+(Reduce(`|`, lapply(tt, `!=`, 0)))
#[1] 1 1 1 0

还可以使用良好的旧
apply
循环:

+apply(tt != 0, 1, any)
#[1] 1 1 1 0
参数
tt!=0
是一个逻辑矩阵,其条目说明值是否不同于零。然后使用带边距的
apply()
进行行操作,以检查
项中是否有
项为
。前缀
+
将逻辑输出转换为数字0或1。它是
as.numeric()
的简写版本

+apply(tt != 0, 1, any)
#[1] 1 1 1 0