如果之前有人问过这个道歉,但我已经搜索了一段时间,找不到任何可以回答我问题的内容。我对使用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中我可能会特别慢,而且我正在使用相当大的数据集。我们欢迎所有的建议!提前谢谢。
答案 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
}