我是R的新手,我遇到了这个问题。我知道我可以做一个循环,但我想看看是否有一个R-ic方法来做它。
我的数据框中的值为100到1000。我想生成一个表的值小于500,600,700,...,1000。
我知道该怎么做:
x = seq(100, 1000, by=10)
y = seq(500, 1000, by=100)
sum(x<y[1])
我需要做类似的事情:
sum(x<y)
将返回带有计数的向量。
我试图寻找类似的问题,但这是非常非特异性的,我找不到答案。
答案 0 :(得分:3)
因为,您可以使用lapply
为例。
unlist(lapply(y, function(i) sum(x<i)))
进行循环是R-idomatic方式。它基本上是一个循环但没有副作用。
修改强>
我更喜欢在这里使用table
,并且在评论中建议使用R-ish sapply
sapply(y, function(i) table(x<i))
[,1] [,2] [,3] [,4] [,5] [,6]
FALSE 51 41 31 21 11 1
TRUE 40 50 60 70 80 90
编辑
你也可以使用vapply
,因为你按照@flodel的建议指定了retun的类型更安全:
vapply(y, function(i) sum(x<i), integer(1L))
答案 1 :(得分:1)
试试这个
sapply(y,FUN=function(iter) sum(x < iter))
答案 2 :(得分:1)
怎么样:
colSums(outer(x, y, '<'))
[1] 40 50 60 70 80 90