如何将R中的多个变量描述性统计数据组合在一个表中



我有这个代码

data_2012 %>%
group_by(job2) %>%
filter(!is.na(job2)) %>%
summarise(mean = mean(persinc2, na.rm = T),
sd = sd(persinc2, na.rm = T))

这给了我一个特定变量的小表,这是完美的,然而我有多个变量,我想要它们的平均值和SD,但它们都在一个表中,我该怎么做?

我是R.的新手

您可以使用across,并且必须使用tidy_select格式选择列:

data_2012 %>%
group_by(job2) %>%
filter(!is.na(job2)) %>%
summarise(across(your_columns, list(mean = ~ mean(.x, na.rm = TRUE), 
sd = ~ sd(.x, na.rm = TRUE))))

使用玩具数据集

iris %>% 
group_by(Species) %>% 
summarise(across(everything(), list(mean = ~ mean(.x, na.rm = TRUE), 
sd = ~ sd(.x, na.rm = TRUE))))
# A tibble: 3 x 9
Species    Sepal.Length_mean Sepal.Length_sd Sepal.Width_mean Sepal.Width_sd
<fct>                  <dbl>           <dbl>            <dbl>          <dbl>
1 setosa                  5.01           0.352             3.43          0.379
2 versicolor              5.94           0.516             2.77          0.314
3 virginica               6.59           0.636             2.97          0.322
# ... with 4 more variables: Petal.Length_mean <dbl>, Petal.Length_sd <dbl>,
#   Petal.Width_mean <dbl>, Petal.Width_sd <dbl>

对于基R,我们可以使用split()通过一些因子变量来分割数据。这将返回一个元素数列表,该列表等于该因子变量的级别数。然后,我们可以使用*apply()家族的成员获得每列每级别的meansd(或您喜欢的任何其他统计数据(,如下所示:

# toy data
df <- mtcars[, 1:5]
# splitting by a factor variable
lapply(split(df, df$cyl), function(x) {
sapply(x, function(i) data.frame(Mean=mean(i), SD=sd(i)))
})

输出

$`4`
mpg      cyl disp     hp       drat     
Mean 26.66364 4   105.1364 82.63636 4.070909 
SD   4.509828 0   26.87159 20.93453 0.3654711
$`6`
mpg      cyl disp     hp       drat     
Mean 19.74286 6   183.3143 122.2857 3.585714 
SD   1.453567 0   41.56246 24.26049 0.4760552
$`8`
mpg      cyl disp     hp       drat     
Mean 15.1     8   353.1    209.2143 3.229286 
SD   2.560048 0   67.77132 50.97689 0.3723618

最新更新