Ich bin vor kurzem von STATA + Excel nach R übergegangen. So würde ich schätzen, wenn mir jemand beim Schreiben von effizientem Code helfen könnte. Ich habe mein Bestes versucht, die Antwort zu recherchieren, bevor ich auf SO poste.Bedingte Filterung und Zusammenfassung in R
Hier ist, wie meine Daten wie folgt aussieht:
mydata<-data.frame(sassign$buyer,sassign$purch,sassign$total_)
str(mydata)
'data.frame': 50000 obs. of 3 variables:
$ sassign.buyer : Factor w/ 2 levels "no","yes": 1 1 1 1 1 2 1 1 2 1 ...
$ sassign.purch : num 10 3 2 1 1 1 1 11 11 1 ...
$ sassign.total_: num 357 138 172 272 149 113 15 238 418 123 ...
head(mydata)
sassign.buyer sassign.purch sassign.total_
1 no 10 357
2 no 3 138
3 no 2 172
4 no 1 272
5 no 1 149
6 yes 1 113
Mein Ziel ist es durchschnittliche Zahl der Käufer mit # bestellt> 1.
So zu finden, hier ist was ich getan habe:
Methode 1: Lange Methode
library(psych)
check<-as.numeric(mydata$sassign.buyer)-1
myd<-cbind(mydata,check)
abcd<-psych::describe(myd[myd$sassign.purch>1,])
abcd$mean[4]
Die Ausgabe, die ich bekommen habe, ist: 0.1031536697, was korrekt ist.
@Sathish: Hier ist, wie Scheck wie folgt aussieht:
head(check)
0 0 0 0 0 1
Das ist mein Zweck tat lösen.
Vorteile dieser Methode: Es ist einfach und in der Regel ein Anfänger-Level. Nachteile: Zu viele-- Ich brauche eine zusätzliche Variable (überprüfen). Plus, ich mag diese Methode nicht - es ist zu klobig.
Side Frage: Ich erkannte, dass Funktionen standardmäßig keine höhere Genauigkeit zeigen, obwohl Optionen (Ziffern = 10) festgelegt ist. Zum Beispiel ist hier, was ich von Laufen bekommen: nur
psych::describe(myd[myd$sassign.purch>1,])
vars n mean sd median trimmed mad min max range skew
sassign.buyer* 1 34880 1.10 0.30 1 1.00 0.00 1 2 1 2.61
sassign.purch 2 34880 5.14 3.48 4 4.73 2.97 2 12 10 0.65
sassign.total_ 3 34880 227.40 101.12 228 226.13 112.68 30 479 449 0.09
check 4 34880 0.10 0.30 0 0.00 0.00 0 1 1 2.61
kurtosis se
sassign.buyer* 4.81 0.00
sassign.purch -1.05 0.02
sassign.total_ -0.72 0.54
check 4.81 0.00
Es ist, wenn ich
abcd$mean[4]
lief
Ich habe 0,1031536697
Methode 2: dplyr Mit Ich habe versucht, Rohre und Funktionsaufruf , aber ich gab endlich auf.
Methode 2 | Try1: psych :: beschreiben (dplyr :: Filter (mydata, mydata $ sassign.purch> 1) [, dplyr :: mutieren (as.numeric (mydata $ sassign.buyer) -1)])
Ausgabe:
Error in UseMethod("mutate_") :
no applicable method for 'mutate_' applied to an object of class "c('double', 'numeric')"
Methode 2 | Try2: Unter Verwendung Rohren:
mydata %>% mutate(newcol = as.numeric(sassign.buyer)-1) %>% dplyr::filter(sassign.purch>1) %>% summarise(meanpurch = mean(newcol))
Das hat funktioniert, und ich bekam meanpurch 0,1031537 =. Ich bin mir immer noch nicht sicher über Try 1.
Irgendwelche Gedanken, warum das nicht funktioniert?
Bitte versuchen Sie, [diesen Beitrag reproduzierbar zu machen] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – shayaa
Shayaa - Ich habe den Code bearbeitet..Ich hoffe, dass dies jetzt reproduzierbar ist. Bitte lassen Sie mich wissen ... – watchtower
Sathish, Vielen Dank für Ihre Antwort. Ich habe die Ausgabe von head (check) gepostet. Bitte lassen Sie mich wissen, wenn Sie Fragen haben. – watchtower