计算向量中超过data.frame

时间:2017-03-02 21:18:41

标签: r dataframe

我有很长的数字列表,例如

 set.seed(123)
 y<-round(runif(100, 0, 200))

我想在列y中存储超过数据框的x列中每个值的值的数量:

 df <- data.frame(x=seq(0,200,20))

我可以手动计算数字,如下所示:

length(which(y>=20)) #93 values exceed 20
length(which(y>=40)) #81 values exceed 40

等。我知道我可以使用带有x的所有值的for循环,但是有更优雅的方式吗?

我试过了:

 df$y <- length(which(y>=df$x))

但这会发出警告,并没有给我所需的输出。

数据框应如下所示:

df
     x   y
1  0 100
2  20  93
3  40  81
4  60  70
5  80  61
6  100  47
7  120  40
8  140  29
9  160  19
10 180   8
11 200   0

1 个答案:

答案 0 :(得分:2)

您可以使用df$x

y的每个值与sapply的所有值进行比较
sapply(df$x, function(a) sum(y>a))
#[1] 99 93 81 70 61 47 40 29 18  6  0

#Looking at your output, maybe you want
sapply(df$x, function(a) sum(y>=a))
#[1] 100  93  81  70  61  47  40  29  19   8   0

这是另一种使用outer的方法,允许对两个向量进行元素比较

rowSums(outer(df$x,y, "<="))
#[1] 100  93  81  70  61  47  40  29  19   8   0

还有一个(来自alexis_laz&#39;评论)

length(y) - findInterval(df$x, sort(y), left.open = TRUE)
# [1] 100  93  81  70  61  47  40  29  19   8   0