具有如下数据,
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 |
+---+--------+-------+
答案 0 :(得分:2)
使用tidyverse
中的cSplit
和splitstackshape
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
对您不重要的值。