Ich habe einen Datensatz mit 30 Variablen. Eine davon ist eine Indikatorvariable (0 oder 1), und ich möchte den Mittelwert jener Zeilen abziehen, bei denen die Bezeichnung für bestimmte Spalten 1 ist (etwas wie Zentrierung, aber den Mittelwert bestimmter Zeilen anstelle der gesamten Spalte).Subtrahieren Mittelwert von bestimmten Zeilen mit summarise_each
Col2 Col3 Col4 label
400 322 345 1
131 345 809 1
565 676 311 0
121 645 777 0
322 534 263 0
545 222 111 0
Für den obigen Datensatz würde Ich mag die folgende Operation für Col2:Col4
auszuführen:
x(i,j)-x'(,j)
wo x(i,j)
eine Zelle, für die und x'(,j)
stellt den Mittelwert der Zeilen in der Spalte repräsentiert label=1
. Für z.B. für [3,1]
sollte es
(565-mean(400,131))= 299.5
Erwartete Ausgabe für Spalte 2:
Col2
134.5
-134.5
299.5
-144.5
56.5
279.5
Ich habe versucht, die summarise_each
Befehl zu verwenden, haben aber bisher erfolglos geblieben. Der Befehl Ich gebe ist
try<- group_by(data,lbl) %>% select(c(4,13:26)) %>% summarise_each(funs((.)-(mean(data[data$lbl==1,])))
Aber das ist NA
zu erzeugen und ich bin nicht wirklich sicher, wo ich falsch gehe (ich bin sicher, dass es in dem summarise_each
Befehl, wo ich auf Figur nicht in der Lage bin heraus, wie man funs()
richtig verwendet)
Jede Hilfe wird geschätzt. Vielen Dank!
Bitte lesen Sie die Informationen über [wie eine gute Frage stellen] (http://stackoverflow.com/help/how-to-ask) und wie man ein [reproduzierbares Beispiel] gibt (http: // s tackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610). Dies wird es anderen sehr erleichtern, Ihnen zu helfen. – Jaap
@ProcrastinatusMaximus Ich habe die Frage bearbeitet und ich hoffe, dies macht es klarer. Vielen Dank! –
Sie wollen den Mittelwert der Spalten, aber ohne Werte wo 'Label == 1'? –