我有一个数据框,其中我的所有 90 个变量都有整数数据,类型为:
代码 | 变量1 | 变量2 | 变量3 | ...
AB | 2 | 3 | 10 | ...
啊| 4 | 6 | 8 | ...
卑诗省 | 1 | 5 | 9 | ...
... | ... | ... | ...
我想通过变量将 shapiro 测试 (shapiro.test {stats}) 应用于我的数据帧,并将结果写入如下表中:
变量名 | W | p 值
有人有线索吗?
我有一个数据框,其中我的所有 90 个变量都有整数数据,类型为:
代码 | 变量1 | 变量2 | 变量3 | ...
AB | 2 | 3 | 10 | ...
啊| 4 | 6 | 8 | ...
卑诗省 | 1 | 5 | 9 | ...
... | ... | ... | ...
我想通过变量将 shapiro 测试 (shapiro.test {stats}) 应用于我的数据帧,并将结果写入如下表中:
变量名 | W | p 值
有人有线索吗?
使用 R 中的 mtcars 数据
mydata<-mtcars
kk<-Map(function(x)cbind(shapiro.test(x)$statistic,shapiro.test(x)$p.value),mydata)
library(plyr)
myout<-ldply(kk)
names(myout)<-c("var","W","p.value")
myout
var W p.value
1 mpg 0.9475648 1.228816e-01
2 cyl 0.7533102 6.058378e-06
3 disp 0.9200127 2.080660e-02
4 hp 0.9334191 4.880736e-02
5 drat 0.9458838 1.100604e-01
6 wt 0.9432578 9.265551e-02
7 qsec 0.9732511 5.935208e-01
8 vs 0.6322636 9.737384e-08
9 am 0.6250744 7.836356e-08
10 gear 0.7727857 1.306847e-05
11 carb 0.8510972 4.382401e-04
数据示例mtcars
。
library(tidyverse)
library(broom)
mtcars %>%
select(-am, - wt) %>% # Remove unnecessary columns
gather(key = "variable_name", value = "value") %>%
group_by(variable_name) %>%
do(broom::tidy(shapiro.test(.$value))) %>%
ungroup() %>%
select(variable_name, W = statistic, `p-value` = p.value)
结果:
# A tibble: 9 x 3
variable_name W `p-value`
<chr> <dbl> <dbl>
1 carb 0.851 0.000438
2 cyl 0.753 0.00000606
3 disp 0.920 0.0208
4 drat 0.946 0.110
5 gear 0.773 0.0000131
6 hp 0.933 0.0488
7 mpg 0.948 0.123
8 qsec 0.973 0.594
9 vs 0.632 0.0000000974
@GegznaV 的回答非常好,但与此同时,tidyverse 有一些更新的构造,例如replace ,并且tidyr::pivot_longer
tidyversetidyr::gather
作者推荐了nest-unnest
语法。
另外,我替换broom::tidy
为broom::glance
它提供了更多模型的统计信息(例如aov()
)。
这是用更新的 tidyverse 语法重写的 @GegznaV 的相同示例:
library(tidyverse)
library(broom)
mtcars %>%
select(-am, -wt) %>%
pivot_longer(
cols = everything(),
names_to = "variable_name",
values_to = "value"
) %>%
nest(data = -variable_name) %>%
mutate(
shapiro = map(data, ~shapiro.test(.x$value)),
glanced = map(shapiro, glance)
) %>%
unnest(glanced) %>%
select(variable_name, W = statistic, p.value) %>%
arrange(variable_name)
这给出了相同的结果:
# A tibble: 9 x 3
variable_name W p.value
<chr> <dbl> <dbl>
1 carb 0.851 0.000438
2 cyl 0.753 0.00000606
3 disp 0.920 0.0208
4 drat 0.946 0.110
5 gear 0.773 0.0000131
6 hp 0.933 0.0488
7 mpg 0.948 0.123
8 qsec 0.973 0.594
9 vs 0.632 0.0000000974