2016-12-22 2 views
0

Kleinen Datenrahmen Beispiel:Berechnungen am innerhalb derselben Kategorie

ID  V1  V2 is 
1 01 23569.5 0.138996 FALSE 
2 01 23611.5 1.318343 TRUE 
3 01 23636.0 0.071871 FALSE 
4 01 23665.5 0.081087 FALSE 
5 01 33417.5 0.102158 FALSE 
6 01 33563.5 0.119645 FALSE 
7 01 42929.5 0.175000 FALSE 
8 01 44552.5 0.066056 FALSE 
9 01 45539.5 0.227691 FALSE 
10 01 46984.5 0.649687 FALSE 
11 01 47018.0 0.932445 FALSE 
12 02 23611.5 1.418377 TRUE 
13 02 23667.5 0.474754 FALSE 
14 02 46984.0 0.443233 FALSE 
15 02 47018.0 0.847738 FALSE 
16 02 47051.5 0.446792 FALSE 
17 02 47096.5 3.602696 FALSE 
18 03 23464.0 1.010199 FALSE 
19 03 23523.5 0.150067 FALSE 
20 03 23611.5 1.273281 TRUE 
21 03 29608.0 0.071324 FALSE... 

Es gibt nur eine Zeile innerhalb jeder ID-Kategorie mit T = ist. Ich möchte eine bequeme Möglichkeit, wissen, das Verhältnis V2 der Berechnung (ist = F)/V2 (ist = T) in jeder ID und fügen Sie das Ergebnis in einer neuen Spalte/Vektor mit einem Ergebnis wie folgt aus:

ID  V1  V2  is   Ratio 
1 1 23569.5 0.138996 FALSE 0.10543235 
2 1 23611.5 1.318343 TRUE 1 
3 1 23636 0.071871 FALSE 0.054516162 
4 1 23665.5 0.081087 FALSE 0.061506755 
5 1 33417.5 0.102158 FALSE 0.077489697 
6 1 33563.5 0.119645 FALSE 0.090754075 
7 1 42929.5 0.175000 FALSE 0.132742389 
8 1 44552.5 0.066056 FALSE 0.050105322 
9 1 45539.5 0.227691 FALSE 0.172709985 
10 1 46984.5 0.649687 FALSE 0.492805742 
11 1 47018 0.932445 FALSE 0.707285585 
12 2 23611.5 1.418377 TRUE 1 
13 2 23667.5 0.474754 FALSE 0.334716369 
14 2 46984 0.443233 FALSE 0.312493082 
15 2 47018 0.847738 FALSE 0.597681716 
16 2 47051.5 0.446792 FALSE 0.315002288 
17 2 47096.5 3.602696 FALSE 2.540012987 
18 3 23464 1.010199 FALSE 0.793382608 
19 3 23523.5 0.150067 FALSE 0.117858509 
20 3 23611.5 1.273281 TRUE 1 
21 3 29608 0.071324 FALSE 0.056015915... 

ich bin für die triviale Frage sorry. Aber mein Suchergebnis hat nicht geholfen, die Lösung zu finden, die ich suche.

+0

Könnten Sie bitte Ihre Frage klären? – mattsson

+0

Sind Kategorien aufeinanderfolgende ganze Zahlen (1,2,3, ...)? – user31264

Antwort

0

Ich nehme an, dass Ihr Dataframe data heißt und bereits nach ID sortiert ist.

Wählen Sie Datensätze mit is==TRUE:

data.true = data[data$is==TRUE,] 

Lauflängencodierung von ID erhalten:

rle.id = rle(data$ID) 

Für jede V2 mit is==TRUE, kopieren Sie sie so oft wie viele Mitglieder der Gruppe sind:

v2.true = rep(data.true$v2, rle.id$len) 

machen Sie die Abteilung

data$Ratio = data$V2/v2.true 
Verwandte Themen