3

我是 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)

这将返回一个带有计数的向量。

我试图寻找类似的问题,但这是一个非常不具体的问题,我找不到答案。

4

3 回答 3

3

由于 ,您可以使用lapply例如。

unlist(lapply(y, function(i) sum(x<i)))

循环是 R 惯用的方式。它基本上是一个循环,但没有副作用。

编辑

我更喜欢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))
于 2013-03-31T19:28:05.517 回答
1

试试这个

 sapply(y,FUN=function(iter) sum(x < iter))
于 2013-03-31T19:32:21.893 回答
1

怎么样:

colSums(outer(x, y, '<'))
[1] 40 50 60 70 80 90
于 2013-03-31T19:41:30.317 回答