如何计算R中的百分比?
我是R的新手,我有一个包含以下字段的数据框:如何计算R中的百分比?,r,dataframe,R,Dataframe,我是R的新手,我有一个包含以下字段的数据框: day place hour time_spent count 1 1 1 1 120 1 1 1 2 100 1 1 1 3 90 1 1 1 4 80 因此,我的目标是计算75%的车辆在每个地方经过的时间。因此,从这个数据框中,我通过 da
day place hour time_spent count
1 1 1 1 120
1 1 1 2 100
1 1 1 3 90
1 1 1 4 80
因此,我的目标是计算75%的车辆在每个地方经过的时间。因此,从这个数据框中,我通过
day place hour time_spent count cum_count percentage
1 1 1 1 120 120 30.7%
1 1 1 2 100 220 56.4%
1 1 1 3 90 310 79%
1 1 1 4 80 390 100%
df$cum_count=cumsum(df$count)
df$percentage=cumsum(df$percentage)
for(i in 1:length(df$percentage)){
if(df$percentage[i]>75%){
low time=df$time_spent[i-1]
high_time=df$time_spent[i]
}
}
这意味着75%的车辆在1号位置上花费了2-3分钟。但现在我有了一个这样的数据框架,它适用于所有的位置和所有的日子
day place hour time_spent count
1 1 1 1 120
1 1 1 2 100
1 1 1 3 90
1 1 1 4 80
1 2 1 1 220
1 2 1 2 100
1 2 1 3 90
1 2 1 4 80
1 3 1 1 100
1 3 1 2 80
1 3 1 3 90
1 3 1 4 100
2 1 1 1 120
2 1 1 2 100
2 1 1 3 90
2 1 1 4 80
2 2 1 1 220
2 2 1 2 100
2 2 1 3 90
2 2 1 4 80
2 3 1 1 100
2 3 1 2 80
2 3 1 3 90
2 3 1 4 100
如何计算每个地点的高峰时间和低谷时间?非常感谢您的帮助。我们可以使用分组操作
library(dplyr)
dfN %>%
group_by(day, place) %>%
mutate(cum_count = cumsum(count),
percentage = 100*cum_count/sum(count),
low_time = time_spent[which.max(percentage > 75)-1],
high_time = time_spent[low_time+1])
max
和min
函数应该在这里起作用。尽管你也可以做summary
一次获得中位数、平均值等。对于这些百分比,我还建议使用分位数
函数。通常情况下,如果以正确的格式获取数据,R是一个棘手的部分
假设您想要在每个地方花费的总时间:
index <- sort(unique(df$place))
times <- as.list(rep(NA, length(index)))
names(times) <- index
for(ii in index){
counter <- c()
for(jj in df[df$place==ii,]$time_spent){
counter <- c(counter, rep(jj, df[df$place==ii,]$count[jj]))
}
times[[ii]] <- counter
}
同样,您可以计算平均值:
lapply(times, function(x) sum(x)/length(x))
lapply(times, mean)
我想你想要的是分位数:
lapply(times, quantile, 0.75)
这将是至少75%的车辆经过某个地方的时间,即75%的车辆经过这段时间或更短的时间。如果我正确理解了您的问题(您希望在某个地方花费的时间的最小值和最大值): 我会给你这个:
place min(time-spent) max(time_spent)
1 1 4
2 1 4
3 1 4
在您的代码
名称(时间)中,我想我已经确定了时间的分配方式。:)啊,这是一个典型的问题。现在编辑。是的,现在它是正确的,但当我使用lappy(时间,分位数,0.75)它有时显示的时间比所花费的时间多。例如,它显示的结果是10.9,对于一些车辆没有在该位置停留10分钟的地方。你对此有什么想法吗?分位数函数的工作原理更像是中值
,而不是平均值
,它可能会四舍五入到最近的观察值。我修改了时间
对象以调整计数。这似乎给出了预期的3或4的值。
df %>%
group_by(place) %>%
summarise(min(time_spent),
max(time_spent))
place min(time-spent) max(time_spent)
1 1 4
2 1 4
3 1 4