R 如何使用带条件的行和返回二进制值?
假设我有一个数据框,其中有一列用于求和数据。如果列a、b或c中的任何值不为零,那么在新列中返回二进制0或1的最有效方法是什么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
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