2017-07-03 4 views
0

Lassen Sie mich ein Excel-Beispiel geben.Durchschnittliches Intervall basierend auf Grenzen anderer Vektoren - "R"

Stellen Sie sich die folgenden Daten als Excel-Spalten:

A1=5 | A2=3 | A3=7 | A4=11 | A5=23 | A6=15 | A7=17 dann B1=1 | B2=4 auch C1=3 | C2=7

Ich möchte eine Spalte „D“ erstellen, die B basierend auf Spalten durchschnittlich Spalte „A“ mit Kriterien berechnet und in diesem Beispiel D1=(Average of A1 to A3) bezogen auf B1=1 und C1=3 ... dann D2=(Average of A4 to A7), basierend auf B2=4 und C2=7.

Die Art und Weise dies auf Excel durchgeführt werden kann, ist D1 = AVERAGE(INDIRECT(CONCATENATE("A",B1)):INDIRECT(CONCATENATE("A",C1))) und natürlich D2 = AVERAGE(INDIRECT(CONCATENATE("A",B2)):INDIRECT(CONCATENATE("A",C2)))

So Verkettung D1 wird verschmelzen „A“ mit „1“, da B1=1 und Sicherung „A“ mit „3“, weil C1=3 gleiches mit D2 ...... Average(A4:A7)

Dies scheint unmöglich mit R, weil ich nicht sehen kann, wie Sie eine Zahl mit einer Spalte fusionieren können, um eine bestimmte Zelle zu finden und dann zu füttern, um einen bestimmten Bereich zu mitteln .

Ich denke, die Beantwortung dieses eine wird viele Tools, die weit über dieses Problem hinausgehen.

Edit:

Danke Chi Pak

Antwort

0

A vector von Werten, wie in Spalte A:

set.seed(1) 
A <- sample(1:100,10) 

[1] 66 13 27 38 2 37 82 32 45 55 

A data.frame von Werten, wie in den Spalten B und C:

df <- data.frame(B = c(1,4), C = c(3,7)) 

    B C 
1 1 3 
2 4 7 

Dies hat 2 Zeilen und 2 Spalten mit Spaltennamen B und C.

Um die mittlere Spalte in A durch Reihen von Spalten angegeben B und C verwenden sapply, die das R Äquivalent eines schnellen for Schleife zu berechnen. Ich verwende iter aus der Bibliothek iterators eine Schleife durch Zeilen der data.frame:

install.packages("iterators") 
library(iterators) 
sapply(iter(df,by="row"),function(x) mean(A[x$B:x$C])) 

[1] 35.33333 39.75000 
Verwandte Themen