SelectR的每一行根据输入不同的列,统计每一行大于0的值

Select different columns in each row of R based on input, and count values bigger than 0 in each row

我的数据框看起来像这样

val1 val2 val3 val4 val5 val6 diff 4 0 0 2 3 0 3 0 1 1 0 2 0 4

对于每一行,我想从第 1 列 + diff 开始计数,并获取大于 0 的值的计数。因此,第 1 行的结果将从第 3 列开始计算大于 0 的值,即2. 第 2 行的结果将从第 4 列开始计算大于 0 的值,即 1。

解决这个问题的最佳方法是什么?

这是一个选项,我们 replace 将基于 'diff' 列的值 NA 并得到 rowSums 值大于 0

rowSums(replace(df1[-ncol(df1)], col(df1[-ncol(df1)])
          <= df1$diff, NA) > 0, na.rm = TRUE)
#[1] 2 1

或者另一种选择是 apply

apply(df1, 1, function(x)  sum(seq_along(x) >  x['diff'] & x > 0)-1)
#[1] 2 1

数据

df1 <- structure(list(val1 = c(4L, 0L), val2 = 0:1, val3 = 0:1, val4 = c(2L, 
0L), val5 = 3:2, val6 = c(0L, 0L), diff = 3:4), 
 class = "data.frame", row.names = c(NA, 
-2L))