r-求和向量的每个元素与给定阈值之间的差



我有以下向量:

my_vec <- c(2,3,5,3,5,2,6,7,2,4,6,8)
threshold <- 4

有没有办法将my_vec的所有较小元素与阈值相比的差异相加?

因此,这个例子的预期结果应该是8(2+1+0+1+0+2+0+2+0+0+0(就我的目的而言,和(8(就是我所需要的(我不需要每个元素之间的差(。我尝试过使用循环,但不幸的是,有几个不同长度的向量,所以我不能在只有10个元素的向量上从1:12(如上面的向量(循环。

首先是threshold以下的子集元素,然后求和差到threshold:

threshold <- 4
sum((threshold - my_vec[my_vec < threshold]))
# [1] 8

您可以在my_vecthreshold之间使用pmin来获得它们中的最小值,并获得它与threshold的差异的sum

sum(threshold - pmin(my_vec, threshold))
#[1] 8

最新更新