R将数据框中选定列的摘要写到新数据框中

时间:2019-11-20 06:00:08

标签: r dataframe

具有如下数据,

text = "
a,b,c
NA,20,-10
1,10,5
2,5,-30
3,30,40
4,40,NA
NA,39,-24.9
"
df = read.table(textConnection(text), sep=",", header = T)

我可以按如下方式获取特定列的summary

summary(df[, c("a", "c")])

我想要的是在新数据框中生成摘要,并以原始df中的列名作为行名,并将摘要属性(例如Min.Mean等)作为列像这样的名字

+---+--------+-------+
|   |  Min   | Mean  |
+---+--------+-------+
| a |   1.00 |  2.50 |
| c | -30.00 | -3.98 |
+---+--------+-------+

1 个答案:

答案 0 :(得分:2)

使用tidyverse中的cSplitsplitstackshape

library(tidyverse)

as.data.frame.matrix(summary(df[, c("a", "c")])) %>% 
     rename_all(trimws) %>%
     splitstackshape::cSplit(c("a", "c"), sep = ":") %>%
     pivot_longer(cols = names(.), names_to = c( "key", ".value"),
                  names_sep = "_") %>%
     pivot_wider(names_from = `1`, values_from = `2`)

# A tibble: 2 x 8
#   key    Min. `1st Qu.` Median  Mean `3rd Qu.`  Max. `NA's`
#  <chr> <dbl>     <dbl>  <dbl> <dbl>     <dbl> <dbl>  <dbl>
#1 a         1      1.75    2.5  2.5       3.25     4      2
#2 c       -30    -24.9   -10   -3.98      5       40      1

另一种方法是分别为每一列计算summary,然后将结果绑定在一起。

cols <- c("a", "c")
map(df[cols], summary) %>%
  map(stack) %>%
  bind_rows(.id = "id") %>%
  pivot_wider(names_from =  ind, values_from = values)

您可以filter对您不重要的值。