R:比较数据帧中向量与列的值

时间:2017-01-05 17:29:59

标签: r

如果之前有人问过这个道歉,但我已经搜索了一段时间,找不到任何可以回答我问题的内容。我对使用R感觉很舒服,但从未真正学过基础知识。这就是我想要做的。

我有一个矢量(称之为“responseTimes”),看起来像这样:

150  50 250  200  100  150  250  

(它实际上要长得多,但我在这里截断它。)

我还有一个数据框,其中一列timeBin基本上从0开始计算50(所以0 50 100 150 200 250等)。

我要做的是计算responseTimes中有多少值小于或等于数据框中的每一行。我想将这些计数存储在数据框的新列中。我的输出应该是这样的:

timeBin    counts
0          0
50         1
100        2
150        4
200        5
250        7

我知道我可以使用sum函数将向量元素与某个常量进行比较(例如,sum(responseTimes> 100)会给我5个我在这里显示的数据)但是我不知道怎么做比较变化的值(即与timeBin列中的每一行进行比较)。

我宁愿不使用循环,因为我被告知在R中我可能会特别慢,而且我正在使用相当大的数据集。我们欢迎所有的建议!提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以这样使用sapply

> timeBin <- seq(0, 250, by=50)
> responseTimes <- c(150,  50, 250,  200,  100,  150,  250 )
> 
> # using sapply (after all `sapply` is a loop)
> ans <- sapply(timeBin, function(x)  sum(responseTimes<=x))
> data.frame(timeBin, counts=ans)  # your desired output.
  timeBin counts
1       0      0
2      50      1
3     100      2
4     150      4
5     200      5
6     250      7

答案 1 :(得分:1)

这可能会有所帮助:

responseTimes <- c(150, 50, 250, 200, 100, 150, 250)
bins1 <- seq(0, 250, by = 50)


sahil1 <- function(input = responseTimes, binsx = bins1) {
    tablem <- table(cut(input, binsx)) # count of input across bins
    tablem <- cumsum(tablem) # cumulative sums
    return(as.data.frame(tablem)) # table to data frame
}