Я пытаюсь найти простой способ создания составной меры из существующих столбцов. Я не понимаю, почему я получаю целое число при попытке вычислить среднее значение с помощью функции mean ().
Я прочитал, что использование rowwise () не рекомендуется, поэтому я попытался найти решение с помощью group_by ().
library(tidyverse)
tstdata <- tibble(id=1:30
,fake1 = sample(c(1:7), replace = TRUE, size=30)
,fake2 = sample(c(1:7), replace = TRUE, size=30)
,fake3 = sample(c(1:7), replace = TRUE, size=30))
tstdata %>% mutate(fakeadd = fake1 + fake2 + fake3) -> tstdata
tstdata %>% group_by(id) %>% mutate(fakesum = sum(fake1,fake2,fake3)) %>% ungroup() -> tstdata
tstdata %>% mutate(fakeavg = (fake1+fake2+fake3)/3) -> tstdata
tstdata %>% group_by(id) %>% mutate(fakemean = mean(fake1,fake2,fake3)) %>% ungroup() -> tstdata
str(tstdata)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 30 obs. of 8 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10 ...
$ fake1 : int 6 5 6 7 6 6 5 3 4 3 ...
$ fake2 : int 7 5 4 6 7 7 5 6 6 5 ...
$ fake3 : int 1 2 2 1 3 7 2 1 4 6 ...
$ fakeadd : int 14 12 12 14 16 20 12 10 14 14 ...
$ fakesum : int 14 12 12 14 16 20 12 10 14 14 ...
$ fakeavg : num 4.67 4 4 4.67 5.33 ...
$ fakemean: int 6 5 6 7 6 6 5 3 4 3 ...
Функция sum (), используемая с group_by (), дает тот же результат, что и моя собственная формула. Я смущен результатами, используя функцию mean (). В этом столбце я получаю целочисленные значения, которые в некоторых случаях даже не округляются должным образом. Я хотел бы иметь возможность обрабатывать недостающие данные с помощью na.rm. Что мне не хватает? У меня больше опыта работы с SPSS, и я новичок в понятиях Tidyverse.
Я добавил пару строк на основе предложений в комментариях:
library(tidyverse)
tstdata <- tibble(id=1:30
,fake1 = sample(c(1:7), replace = TRUE, size=30)
,fake2 = sample(c(1:7), replace = TRUE, size=30)
,fake3 = sample(c(1:7), replace = TRUE, size=30))
tstdata %>% mutate(fakeadd = fake1 + fake2 + fake3) -> tstdata
tstdata %>% group_by(id) %>% mutate(fakesum = sum(fake1,fake2,fake3)) %>% ungroup() -> tstdata
tstdata %>% mutate(fakeavg = (fake1+fake2+fake3)/3) -> tstdata
tstdata %>% group_by(id) %>% mutate(fakemean = mean(fake1,fake2,fake3)) %>% ungroup() -> tstdata
tstdata %>% mutate(fakerowmean = rowMeans(.[c(fake1,fake2,fake3)])) -> tstdata
tstdata %>% group_by(id) %>% mutate(fakemean3 = mean(c(fake1,fake2,fake3))) %>% ungroup() -> tstdata
str(tstdata)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 30 obs. of 10 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10 ...
$ fake1 : int 5 6 1 3 3 3 7 7 1 4 ...
$ fake2 : int 5 1 6 6 3 6 1 6 7 5 ...
$ fake3 : int 6 4 1 6 2 1 6 4 5 6 ...
$ fakeadd : int 16 11 8 15 8 10 14 17 13 15 ...
$ fakesum : int 16 11 8 15 8 10 14 17 13 15 ...
$ fakeavg : num 5.33 3.67 2.67 5 2.67 ...
$ fakemean : int 5 6 1 3 3 3 7 7 1 4 ...
$ fakerowmean: num 8.02 5.72 4.57 8.17 4.91 ...
$ fakemean3 : num 5.33 3.67 2.67 5 2.67 ...
Изменение аргументов в функции mean ()дает соответствующие результаты сейчас. Я попытался использовать rowMeans () так, как это было отформатировано в комментариях, но я не знаю, откуда они берутся. Они не являются средствами 3 столбцов. Спасибо за быстрые комментарии!