将矩阵转换为 R 中的数据框

v_h*_*ead 2 r

我有以下数字数据框数据集:

x1   x2   x3  ...
1    2    3
...

Run Code Online (Sandbox Code Playgroud)

我对所有列进行了以下应用夏皮罗测试

lshap <- lapply(dataset, shapiro.test)
lres <- t(sapply(lshap, `[`, c("statistic","p.value")))
Run Code Online (Sandbox Code Playgroud)

的输出lres看起来像这样:

               statistic p.value     
Strong         0.8855107 6.884855e-14
Hardworking    0.9360735 8.031421e-10
Focused        0.9350827 6.421583e-10
Run Code Online (Sandbox Code Playgroud)

现在,当我这样做时:

class(lres)
Run Code Online (Sandbox Code Playgroud)

它给了我"matrix" "array"

我的问题是如何转换lres为数据框?

我想要这个输出作为数据框:

variable       statistic p.value  
   
Strong         0.8855107 6.884855e-14
Hardworking    0.9360735 8.031421e-10
Focused        0.9350827 6.421583e-10
...
Run Code Online (Sandbox Code Playgroud)

当我这样做时,to_df <- as.data.frame(lres)我得到以下奇怪的输出:

             statistic   p.value
Strong      <dbl [1]>   <dbl [1]>       
Hardworking <dbl [1]>   <dbl [1]>       
Focused     <dbl [1]>   <dbl [1]>       
Gritty      <dbl [1]>   <dbl [1]>       
Adaptable   <dbl [1]>   <dbl [1]>   
...
Run Code Online (Sandbox Code Playgroud)

这有什么问题吗?

akr*_*run 5

在 中base R,OP 的“lres”的问题是每个元素都是list中的元素matrix。我们可以使用

out <- do.call(rbind, lapply(mtcars, function(x) 
      as.data.frame(shapiro.test(x)[c('statistic', 'p.value')])))
out <- cbind(variable = row.names(out), out)
row.names(out) <- NULL
Run Code Online (Sandbox Code Playgroud)

-输出

out
#   variable statistic      p.value
#1       mpg 0.9475647 1.228814e-01
#2       cyl 0.7533100 6.058338e-06
#3      disp 0.9200127 2.080657e-02
#4        hp 0.9334193 4.880824e-02
#5      drat 0.9458839 1.100608e-01
#6        wt 0.9432577 9.265499e-02
#7      qsec 0.9732509 5.935176e-01
#8        vs 0.6322635 9.737376e-08
#9        am 0.6250744 7.836354e-08
#10     gear 0.7727856 1.306844e-05
#11     carb 0.8510972 4.382405e-04
Run Code Online (Sandbox Code Playgroud)

或者我们可以使用as_tibble

library(dplyr)
library(tidyr)
as_tibble(lres, rownames = 'variable') %>%
     unnest(-variable)
Run Code Online (Sandbox Code Playgroud)

-输出

# A tibble: 11 x 3
#  variable  statistic      p.value
#   <chr>     <dbl>        <dbl>
# 1 mpg       0.948 0.123       
# 2 cyl       0.753 0.00000606  
# 3 disp      0.920 0.0208      
# 4 hp        0.933 0.0488      
# 5 drat      0.946 0.110       
# 6 wt        0.943 0.0927      
# 7 qsec      0.973 0.594       
# 8 vs        0.632 0.0000000974
# 9 am        0.625 0.0000000784
#10 gear      0.773 0.0000131   
#11 carb      0.851 0.000438    
Run Code Online (Sandbox Code Playgroud)

或者可以一步完成

library(purrr)
library(broom)
imap_dfr(mtcars, ~ shapiro.test(.x) %>% 
                      tidy %>%
                      select(-method), .id = 'variable')
Run Code Online (Sandbox Code Playgroud)

-输出

# A tibble: 11 x 3
#   variable statistic      p.value
#   <chr>        <dbl>        <dbl>
# 1 mpg          0.948 0.123       
# 2 cyl          0.753 0.00000606  
# 3 disp         0.920 0.0208      
# 4 hp           0.933 0.0488      
# 5 drat         0.946 0.110       
# 6 wt           0.943 0.0927      
# 7 qsec         0.973 0.594       
# 8 vs           0.632 0.0000000974
# 9 am           0.625 0.0000000784
#10 gear         0.773 0.0000131   
#11 carb         0.851 0.000438    
Run Code Online (Sandbox Code Playgroud)

数据

lshap <- lapply(mtcars, shapiro.test)
lres <- t(sapply(lshap, `[`, c("statistic","p.value")))
Run Code Online (Sandbox Code Playgroud)