2017-02-19 2 views
0

Ich habe eine Daten namens Data_v und eine der Spalten ist Gehälter. Der Bereich der Daten liegt zwischen 0 und 140 000. Ich möchte verschiedene Bereiche (Bereich 1: 0-10000, Bereich 2: 10000-20000 ...) finden, um den Median jedes Bereichs zu berechnen und den Bereich durch seinen Median zu ersetzen.Finden Sie einen Bereich in R und ersetzen Sie ihn durch den Median

diese Verwendung ich in der Lage bin die gewünschte Ausgabe zu erhalten:

first = data_v$salaries[data_v$salaries>=0 & data_v$salaries<10000] 
data_v$salaries[data_v$salaries>=0 & data_v$salaries<10000] = median(first) 

second = data_v$salaries[data_v$salaries>=10000 & data_v$salaries<20000] 
data_v$salaries[data_v$salaries>=10000 & data_v$salaries<20000] = median(second) 

.............

ten=data_v$salaries[data_v$salaries>=90000 & data_v$salaries<=100000] 
data_v$salaries[data_v$salaries >= 90000 & data_v$salaries <= 100000] = median(ten) 

Ausgang:

table(data_v$salaries) 

median 7949 17523 25939 34302 42827 56840 65423 73292 81900  95479.75 
#  130  2022  8481  9233  2661  1270  3864  2232  176  4 

Ich habe versucht, das gleiche mit While-Schleife ohne Erfolg zu implementieren:

i <- 0; 
while(i <=140000) { 
    m = data_v$salaries[data_v$salaries >= i & data_v$salaries < (i + 10000)] 
    data_v$salaries[data_v$salaries >= i & data_v$salaries < (i + 10000)] = median(m) 
    i <- i + 10000; } 

Jede Hilfe/Vorschläge sind mehr als willkommen.

+0

Hallo Biljana, würde ich dplyr aber könnten Sie uns vielleicht ein reproduzierbares Beispiel: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – biomiha

+0

Ich stimme zu, wir könnten dplyr oder data.table verwenden. Beide Pakete sind ideal für die Datenbearbeitung. Ein reproduzierbares Beispiel wäre wünschenswert, um Ihnen eine vollständige Antwort zu geben. – cderv

Antwort

2
data(mtcars) # data for test 
step = 10 # interval length, 10000 for your data 
n = ceiling(max(mtcars$mpg)/step) # number of intervals 
mtcars$mpg_interval = cut(mtcars$mpg, step*(0:n)) 
mtcars$mpg_median = ave(mtcars$mpg, mtcars$mpg_interval, FUN = median) 
+0

Funktioniert perfekt. Vielen Dank! – Jane

Verwandte Themen