如何计算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

我是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%的车辆在每个地方经过的时间。因此,从这个数据框中,我通过

 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