R ошибка описания индекса функции вне границ - PullRequest
0 голосов
/ 19 июня 2020

Я новичок в R, и я пытаюсь получить описательную статистику, сгруппированную по нескольким переменным, используя функцию describeby из пакета mental.

Вот что я пытаюсь запустить:

JL <- describeBy(df$JL, group=list(df$Time, df$Cohort, df$Gender), digits=3, skew=FALSE, mat=TRUE)

И я получаю сообщение об ошибке Error in `[<-`(`*tmp*`, var, group + 1, value = dim.names[[group]][[groupi]]) : subscript out of bounds

Я получаю это сообщение об ошибке только с моей переменной Gender (которая дихотомична в этом наборе данных). Я могу запустить код, когда беру аргумент mat = TRUE, и вижу, что он генерирует группировки с NULL для Gender. В других ответах я видел, что это как-то связано с тем, что массив выходит за пределы, но я не уверен, как устранить неполадки. Приветствуются любые советы.

Большое спасибо.

1 Ответ

0 голосов
/ 19 июня 2020

Вы можете использовать dplyr с добавлением некоторых пользовательских функций.

library(dplyr)

se <- function(x) sd(x, na.rm=TRUE)/sqrt(length(na.omit(x)))
rnge <- function(x) diff(range(x, na.rm=TRUE))

group_by(df, Time, Cohort, Gender) %>%
  summarise_at(vars(JL), .funs=list(n=length, mean=mean, sd=sd, min=min, max=max, range=rnge, se=se)) %>% 
  as.data.frame()

Использование набора данных mtcars:

group_by(mtcars, vs, am, cyl) %>%
  summarise_at(vars(mpg), .funs=list(n=length, mean=mean, sd=sd, min=min, max=max, range=rnge, se=se)) %>% as.data.frame()

  vs am cyl  n mean    sd  min  max range    se
1  0  0   8 12 15.1 2.774 10.4 19.2   8.8 0.801
2  0  1   4  1 26.0    NA 26.0 26.0   0.0    NA
3  0  1   6  3 20.6 0.751 19.7 21.0   1.3 0.433
4  0  1   8  2 15.4 0.566 15.0 15.8   0.8 0.400
5  1  0   4  3 22.9 1.453 21.5 24.4   2.9 0.839
6  1  0   6  4 19.1 1.632 17.8 21.4   3.6 0.816
7  1  1   4  7 28.4 4.758 21.4 33.9  12.5 1.798

Использование функции describBy из пакета Psy возвращает вашу ошибку:

library(psych)
describeBy(mtcars$mpg, group=list(mtcars$vs, mtcars$am, mtcars$cyl), digits=3, skew=FALSE, mat=TRUE)

Ошибка в [<- (*tmp*, var, group + 1, value = dim.names [[group]] [[groupi]]): нижний индекс вне границ

Потому что не все комбинации трех групп существуют в данных.

with(mtcars,
     ftable(table(vs,am,cyl)))
#      cyl  4  6  8
#vs am             
#0  0       0  0 12
#   1       1  3  2
#1  0       3  4  0
#   1       7  0  0
...