Ich habe dieses "d" Datenrahmen, der 2 Gruppen hat. Im wirklichen Leben habe ich 20 Gruppen.korrekte Weise Spalten zu Datenrahmen ohne Schleife hinzufügen
d= data.frame(group = c(rep("A",10),rep("B",10),"A"), value = c(seq(1,10,1),seq(101,110,1),10000))
d
group value
1 A 1
2 A 2
3 A 3
4 A 4
5 A 5
6 A 6
7 A 7
8 A 8
9 A 9
10 A 10
11 B 101
12 B 102
13 B 103
14 B 104
15 B 105
16 B 106
17 B 107
18 B 108
19 B 109
20 B 110
21 A 10000
Ich mag würde 2 Spalten hinzufügen, „oben“ und „unten“, das bei der GROUP unter dem Niveau berechnet.
d= data.frame(group = c(rep("A",10),rep("B",10),"A"), value = c(seq(1,10,1),seq(101,110,1),10000))
d
d$upper = ifelse(d$group=="A", quantile(d$value[d$group=="A"])[4]+ 2.5*IQR(d$value[d$group=="A"]), quantile(d$value[d$group=="B"])[4]+ 2.5*IQR(d$value[d$group=="B"]) )
d$lower = ifelse(d$group=="A", quantile(d$value[d$group=="A"])[4]- 2.5*IQR(d$value[d$group=="A"]), quantile(d$value[d$group=="B"])[4]- 2.5*IQR(d$value[d$group=="B"]) )
group value upper lower
1 A 1 21 -4.0
2 A 2 21 -4.0
3 A 3 21 -4.0
4 A 4 21 -4.0
5 A 5 21 -4.0
6 A 6 21 -4.0
7 A 7 21 -4.0
8 A 8 21 -4.0
9 A 9 21 -4.0
10 A 10 21 -4.0
11 B 101 119 96.5
12 B 102 119 96.5
13 B 103 119 96.5
14 B 104 119 96.5
15 B 105 119 96.5
16 B 106 119 96.5
17 B 107 119 96.5
18 B 108 119 96.5
19 B 109 119 96.5
20 B 110 119 96.5
21 A 10000 21 -4.0
Aber wenn ich 20 oder 30 Spalten was ist der beste Weg, um diese Spalten hinzufügen, ohne eine Schleife zu tun: Da es nur zwei Gruppen sind, kann ich die Spalten manuell wie folgt hinzufügen?
Sie sollten 'lapply' verwenden. Es ist immer noch eine Schleife, aber ist in c geschrieben. Außerdem erstellt es nicht wiederholt Kopien des data.frame, nur einmal am Ende. 'mydf [] <- lapply (listOfStuff, function)' Wenn Sie möchten, könnten Sie eine Liste von Funktionen im ersten Argument haben. – lmo
hängt davon ab, wie Sie die Spalten erstellen müssen. hast du 20-30 Variationen der oberen/unteren Spalten oder sind das ganz anders? – rawr
nein die Berechnung ändert sich nicht. Was sich ändert, ist, dass es spezifisch für die Gruppe ist – user3022875