data > opinion

Tom Alby

R-Funktion des Tages: rep.int

2018-02-15


Sie sind hier: start / r funktion des tages rep int /

Problem: Ich bekomme von dem System eine aggregierte Liste der Nutzer, die in ein Bucket fallen, zum Beispiel wie viele Nutzer pro Anzahl Sekunden auf einer Seite waren:

library(readr)
df <- read_csv("data1.csv", locale = locale(decimal_mark = ",", grouping_mark = "."))
## Parsed with column specification:
## cols(
##   seconds = col_number(),
##   users = col_character()
## )
df
## # A tibble: 14 x 2
##    seconds users
##      <dbl> <chr>
##  1     201 107  
##  2     299 574  
##  3     439 234  
##  4     615 117  
##  5     837 688  
##  6    1003 248  
##  7    1056 207  
##  8    1025 102  
##  9     949 128  
## 10     857 241  
## 11     764 080  
## 12     677 163  
## 13     600 691  
## 14     534 670

Jetzt möchte ich die üblichen Werte wissen wie mean, median etc. Dumm nur, dass mir die einzelnen Werte nicht zur Verfügung stehen, sondern eben nur pro Kategorie wie 1 Sekunde, 2 Sekunden, 3 Sekunden und so weiter. Ich könnte jetzt zwar noch den Mean ausrechnen (indem ich zB eine dritte Spalte erstelle und in dieser das Produkt aus seconds und users berechne und dann summiere und durch die Summe der Spalte users teile, aber den Median bekomme ich trotzdem so nicht raus.

Lösung: rep.int. Diese Funktion wiederholt einen Wert in einer Spalte genau so oft wie in einer anderen Spalte angegeben, in diesem Beispiel mit

with(df, summary(rep.int(df$seconds,df$users)) )
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   201.0   534.0   600.0   655.9   837.0  1056.0