Ich möchte ddply verwenden, um Daten aus mehreren Variablen nach mehreren Faktoren zusammenzufassen.R ddply-Schleifen; mehrere Faktoren
Ich habe folgende Testdaten:
site block plot rep name weight height dtf
Alberta 1 2 1 A 43 139 54
Alberta 2 5 2 A 46 139 46
Alberta 4 10 3 A 49 136 54
Nunavut 1 1 1 A 49 136 59
Nunavut 2 4 2 A 51 135 50
Nunavut 3 8 3 A 52 133 56
Alberta 5 13 1 B 55 132 50
Alberta 4 12 2 B 55 125 46
Alberta 5 15 3 B 56 120 46
Nunavut 5 14 1 B 57 119 54
Nunavut 5 13 2 B 58 119 55
Nunavut 4 11 3 B 59 118 51
...
und so weiter.
Ich möchte die Variablen "Gewicht", "Höhe", "dtf" nehmen und sie nach den Faktoren "Standort" und "Name" zusammenfassen.
Ich begann mit Vektoren der Spaltennamen:
data.factors <- NULL
data.variables <- NULL
for(n in 1:length(data)){if(is.factor(data[[n]])){ data.factors <- c(data.factors,colnames(data[n]))} else next}
for(n in 1:length(data)){if(is.numeric(data[[n]]) || is.integer(data[[n]])){ data.variables <- c(data.variables,colnames(data[n]))} else next}
Das funktionierte mehrere Einzelfaktor ANOVA für die Durchführung:
for(variables in data.variables){
for(factors in data.factors){
output1 <- aov(lm(data[[variables]]~data[[factors]]))
cat(variables)
cat(" by ")
cat(factors)
cat("\n")
print(summary(output1))
}}
Aber ich kann es nicht mit ddply zu arbeiten.
for (x in data.variables){
variable.summary <- ddply(data, .(site,name), summarise,
N = sum(!is.na(x[1])),
min = min(x[1], na.rm=TRUE),
max = max(x[1], na.rm=TRUE),
mean = mean(x[1], na.rm=TRUE),
sd = sd(x[1], na.rm=TRUE),
se = sd/sqrt(N)
)
print(variable.summary)
}
Alles, was ich bekommen ist folgende:
site name N min max mean sd se
1 Alberta A 1 weight weight NA NA NA
2 Alberta B 1 weight weight NA NA NA
3 Alberta C 1 weight weight NA NA NA
4 Alberta D 1 weight weight NA NA NA
5 Alberta E 1 weight weight NA NA NA
6 Nunavut A 1 weight weight NA NA NA
7 Nunavut B 1 weight weight NA NA NA
8 Nunavut C 1 weight weight NA NA NA
9 Nunavut D 1 weight weight NA NA NA
10 Nunavut E 1 weight weight NA NA NA
....
Wäre ich ddply zu testen, eine einzelne Variable (eingegeben direkt vielmehr, dass durch „x“ bezeichnet), es würde gut funktionieren.
Gibt es einen Trick, damit die Funktion die referenzierte Spalten-ID erkennt? Ich bin zu PERL, mit seinen $ Skalare verwendet, die überall referenziert werden können, und hatte gehofft, dass ein ähnliches System in R.