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))
我的数据框看起来像这样
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))