1

我有一个数据框,其中我的所有 90 个变量都有整数数据,类型为:

代码 | 变量1 | 变量2 | 变量3 | ...

AB | 2 | 3 | 10 | ...

啊| 4 | 6 | 8 | ...

卑诗省 | 1 | 5 | 9 | ...

... | ... | ... | ...

我想通过变量将 shapiro 测试 (shapiro.test {stats}) 应用于我的数据帧,并将结果写入如下表中:

变量名 | W | p 值

有人有线索吗?

4

3 回答 3

1

使用 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
于 2013-08-27T19:45:57.980 回答
1

数据示例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
于 2018-01-01T20:23:17.000 回答
1

@GegznaV 的回答非常好,但与此同时,tidyverse 有一些更新的构造,例如replace ,并且tidyr::pivot_longertidyversetidyr::gather作者推荐了nest-unnest语法。

另外,我替换broom::tidybroom::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
于 2020-12-16T07:23:30.040 回答