如何计算R中的百分比?

时间:2017-01-27 06:13:21

标签: 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%的车辆穿过这个地方。所以从这个数据框架我生成以下数据框

 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%的车辆在这个地方花费了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

如何计算每个地方的高时间和低时间?感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

maxmin函数应该在这里诀窍。虽然您也可以summary一次性获得中位数,平均值等。我还建议quantile这些百分比的功能。通常情况下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, max)
lapply(times, min)

同样,您可以计算均值:

lapply(times, function(x) sum(x)/length(x))
lapply(times, mean)

我认为你想要的是分位数:

lapply(times, quantile, 0.75)

这是至少75%的车辆通过一个地方的时间,即75%的车辆花了这个或更少的时间通过。

答案 1 :(得分:0)

我们可以按操作使用组

        char binarycode[5][5];
        string tmp;
        cout<<"Please type first 5 binary numbers: ";
        cin>>tmp;
        char tmp2[5];
        strcpy(tmp2, tmp.c_str());
        binarycode[0] = tmp2;

答案 2 :(得分:0)

如果我正确理解你的问题(你想在一个地方找到time_spent的最小值和最大值):

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