R 对矩阵中的每一行执行t-测试-处理NAs
我想对矩阵中的每一行进行t检验。矩阵如下所示:R 对矩阵中的每一行执行t-测试-处理NAs,r,statistics,na,hypothesis-test,rowwise,R,Statistics,Na,Hypothesis Test,Rowwise,我想对矩阵中的每一行进行t检验。矩阵如下所示: data <- structure(c(NA, NA, 216750, 440450, NA, NA, 597510, 1839055, 851820, 1210200, NA, NA, NA, NA, 486720, 602970, 333150, 346532, NA, NA, 421290, 425660, NA, 375440), .Dim = c(6L, 4L), .Dimnam
data <-
structure(c(NA, NA, 216750, 440450, NA, NA, 597510, 1839055,
851820, 1210200, NA, NA, NA, NA, 486720, 602970, 333150, 346532,
NA, NA, 421290, 425660, NA, 375440), .Dim = c(6L, 4L), .Dimnames = list(
c("Gregg", "Mark", "Donnie",
"Fred", "Tim", "Gracie"
), c("AUC_Rep1", "AUC_Rep2", "AUC_Rep3", "AUC_Rep4")))
data调整@count的注释以返回p值:
tpval <- function(x) {
if(sum(!is.na(x)) < 2) {
NA_real_
} else {
t.test(x, na.rm=TRUE)$p.value
}
}
> apply(data, 1, tpval)
Gregg Mark Donnie Fred Tim Gracie
NA NA 0.03350020 0.03600664 NA 0.02547686
结果是:
> row_t_onesample(data)
obs mean var stderr df statistic pvalue conf.low conf.high alternative mean.null conf.level
Gregg 1 597510 NaN NaN 0 NA NA NA NA two.sided 0 0.95
Mark 1 1839055 NaN NaN 0 NA NA NA NA two.sided 0 0.95
Donnie 4 494145 70080791100 132363.9 3 3.733231 0.03350020 72904.05 915386.0 two.sided 0 0.95
Fred 4 669820 136234723133 184549.9 3 3.629478 0.03600664 82499.72 1257140.3 two.sided 0 0.95
Tim 1 333150 NaN NaN 0 NA NA NA NA two.sided 0 0.95
Gracie 2 360986 417836232 14454.0 1 24.974817 0.02547686 177330.52 544641.5 two.sided 0 0.95
Warning message:
row_t_onesample: 3 of the rows had less than 2 "x" observations.
First occurrence at row 1
如果您的数据是一个data.frame
这可能会起作用:apply(dat,1,函数(x)ifelse(sum(is.na(x))%in%c(length(x),length(x)-1),“na”,t.test(x,na.rm=TRUE))
它不能解决问题。在%c(长度(x),长度(x)-1)中给出ifelse(sum(is.na(x))中的错误error:t.test.default中的错误(x,na.rm=TRUE):根据您的示例,没有足够的“x”观察值对我有效。错误是否发生在实际数据中?它对我的示例数据也不起作用。第一个错误是从:t.test.default(x,na.rm=TRUE)
调用的,当我按继续时,它会给出前面评论中提到的错误。
> row_t_onesample(data)
obs mean var stderr df statistic pvalue conf.low conf.high alternative mean.null conf.level
Gregg 1 597510 NaN NaN 0 NA NA NA NA two.sided 0 0.95
Mark 1 1839055 NaN NaN 0 NA NA NA NA two.sided 0 0.95
Donnie 4 494145 70080791100 132363.9 3 3.733231 0.03350020 72904.05 915386.0 two.sided 0 0.95
Fred 4 669820 136234723133 184549.9 3 3.629478 0.03600664 82499.72 1257140.3 two.sided 0 0.95
Tim 1 333150 NaN NaN 0 NA NA NA NA two.sided 0 0.95
Gracie 2 360986 417836232 14454.0 1 24.974817 0.02547686 177330.52 544641.5 two.sided 0 0.95
Warning message:
row_t_onesample: 3 of the rows had less than 2 "x" observations.
First occurrence at row 1