我正在尝试找出一种从现有列创建复合度量的 tidyverse 方法。我不明白为什么在尝试使用 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 ...
与 group_by() 一起使用的 sum() 函数给出的结果与我自己的公式相同。我对使用 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 列的手段。感谢您的快速评论!