Versuchen mit dplyr zu group_by und anwenden scale()
Versuchen, zu verwenden dplyr
zu group_by
die stud_ID
variable in der folgenden Daten-frame, wie in diese Frage ALSO:
> str(df)
'data.frame': 4136 obs. of 4 variables:
$ stud_ID : chr "ABB112292" "ABB112292" "ABB112292" "ABB112292" ...
$ behavioral_scale: num 3.5 4 3.5 3 3.5 2 NA NA 1 2 ...
$ cognitive_scale : num 3.5 3 3 3 3.5 2 NA NA 1 1 ...
$ affective_scale : num 2.5 3.5 3 3 2.5 2 NA NA 1 1.5 ...
Habe ich versucht, das folgende zu erhalten, Skalenwerte von Schüler (eher als Skalenwerte für die Beobachtungen über alle Studierenden):
scaled_data <-
df %>%
group_by(stud_ID) %>%
mutate(behavioral_scale_ind = scale(behavioral_scale),
cognitive_scale_ind = scale(cognitive_scale),
affective_scale_ind = scale(affective_scale))
Hier ist das Ergebnis:
> str(scaled_data)
Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 4136 obs. of 7 variables:
$ stud_ID : chr "ABB112292" "ABB112292" "ABB112292" "ABB112292" ...
$ behavioral_scale : num 3.5 4 3.5 3 3.5 2 NA NA 1 2 ...
$ cognitive_scale : num 3.5 3 3 3 3.5 2 NA NA 1 1 ...
$ affective_scale : num 2.5 3.5 3 3 2.5 2 NA NA 1 1.5 ...
$ behavioral_scale_ind: num [1:12, 1] 0.64 1.174 0.64 0.107 0.64 ...
..- attr(*, "scaled:center")= num 2.9
..- attr(*, "scaled:scale")= num 0.937
$ cognitive_scale_ind : num [1:12, 1] 1.17 0.64 0.64 0.64 1.17 ...
..- attr(*, "scaled:center")= num 2.4
..- attr(*, "scaled:scale")= num 0.937
$ affective_scale_ind : num [1:12, 1] 0 1.28 0.64 0.64 0 ...
..- attr(*, "scaled:center")= num 2.5
..- attr(*, "scaled:scale")= num 0.782
Den drei skalierten Variablen (behavioral_scale
, cognitive_scale
, und affective_scale
) haben nur 12 Beobachtungen - die gleiche Anzahl von Beobachtungen für die ersten Schüler, ABB112292
.
Was ist denn hier Los? Wie kann ich erhalten, skaliert erreicht souverän durch die einzelnen?
- Haben Sie sah in
summarise()
imdplyr
? - Ich denke, Sie sollten mutieren, bevor Sie die Gruppe, oder du gehst zur Mitte jeden Schüler die Punktzahl auf ihn/Sie selbst
- auf ihn/Sie selbst, damit jeder Schüler die Beobachtungen wird M = 0 und SD = 1
- OK ich bekomme es jetzt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint das problem zu sein, in der Basis
scale()
- Funktion, die erwartet, dass eine matrix. Versuchen schreiben Sie Ihre eigenen.Dann funktioniert:
Oder, wenn Sie offen für eine
data.table
Lösung:War dies ein bekanntes problem in dplyr, ein fix wurde zusammengeführt, um die Entwicklung der version, die Sie installieren können, über
In der stable-version, sollte Folgendes auch funktionieren: