R describeby函数下标越界错误
R describeby function subscript out of bounds error
我是 R 的新手,我正在尝试使用 psych 包中的 describeby 函数获取按多个变量分组的描述性统计数据。
这是我正在尝试的 运行:
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
我只在我的性别变量(在这个数据集中是二分法)中收到此错误消息。当我取出 mat=TRUE 参数时,我能够 运行 代码,并且我看到它正在为 Gender 使用 NULL 生成分组。我在其他答案中看到这与数组越界有关,但我不确定如何排除故障。任何建议表示赞赏。
非常感谢。
您可以使用 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
使用 psych 包中的 describBy
函数 returns 你的错误:
library(psych)
describeBy(mtcars$mpg, group=list(mtcars$vs, mtcars$am, mtcars$cyl), digits=3, skew=FALSE, mat=TRUE)
Error in [<-
(*tmp*
, var, group + 1, value =
dim.names[[group]][[groupi]]) : subscript out of bounds
因为数据中并不存在三组的所有组合。
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
我是 R 的新手,我正在尝试使用 psych 包中的 describeby 函数获取按多个变量分组的描述性统计数据。
这是我正在尝试的 运行:
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
我只在我的性别变量(在这个数据集中是二分法)中收到此错误消息。当我取出 mat=TRUE 参数时,我能够 运行 代码,并且我看到它正在为 Gender 使用 NULL 生成分组。我在其他答案中看到这与数组越界有关,但我不确定如何排除故障。任何建议表示赞赏。
非常感谢。
您可以使用 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
使用 psych 包中的 describBy
函数 returns 你的错误:
library(psych)
describeBy(mtcars$mpg, group=list(mtcars$vs, mtcars$am, mtcars$cyl), digits=3, skew=FALSE, mat=TRUE)
Error in
[<-
(*tmp*
, var, group + 1, value = dim.names[[group]][[groupi]]) : subscript out of bounds
因为数据中并不存在三组的所有组合。
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