我有一个数据框,我希望得到每个列的摘要,我希望这个输出以表格格式呈现。我试过了
summary_table <- as.data.frame(summary(mydata))
但它不起作用。有帮助吗?
答案 0 :(得分:3)
我不知道我会认为这是一种“可呈现”的格式,但如果你真的坚持unclass
,你可以始终summary
data.frame
的结果一种“宽泛”的形式。
data.frame(unclass(summary(airquality)))
## X....Ozone X...Solar.R X.....Wind X.....Temp X....Month X.....Day
## 1 Min. : 1.00 Min. : 7.0 Min. : 1.700 Min. :56.00 Min. :5.000 Min. : 1.0
## 2 1st Qu.: 18.00 1st Qu.:115.8 1st Qu.: 7.400 1st Qu.:72.00 1st Qu.:6.000 1st Qu.: 8.0
## 3 Median : 31.50 Median :205.0 Median : 9.700 Median :79.00 Median :7.000 Median :16.0
## 4 Mean : 42.13 Mean :185.9 Mean : 9.958 Mean :77.88 Mean :6.993 Mean :15.8
## 5 3rd Qu.: 63.25 3rd Qu.:258.8 3rd Qu.:11.500 3rd Qu.:85.00 3rd Qu.:8.000 3rd Qu.:23.0
## 6 Max. :168.00 Max. :334.0 Max. :20.700 Max. :97.00 Max. :9.000 Max. :31.0
## 7 NA's :37 NA's :7 <NA> <NA> <NA> <NA>
然而,我发现输出包含大量冗余信息。
我想您也可以考虑以下功能:
summaryDF <- function(indf) {
require(splitstackshape)
temp <- data.table(summary(indf))[, c("V2", "N"), with = FALSE]
dcast.data.table(cSplit(temp, "N", ":")[!is.na(N_1)],
N_1 ~ V2, value.var = "N_2")
}
summaryDF(airquality)
## N_1 Day Temp Wind Month Ozone Solar.R
## 1: 1st Qu. 8.0 72.00 7.400 6.000 18.00 115.8
## 2: 3rd Qu. 23.0 85.00 11.500 8.000 63.25 258.8
## 3: Max. 31.0 97.00 20.700 9.000 168.00 334.0
## 4: Mean 15.8 77.88 9.958 6.993 42.13 185.9
## 5: Median 16.0 79.00 9.700 7.000 31.50 205.0
## 6: Min. 1.0 56.00 1.700 5.000 1.00 7.0
## 7: NA's NA NA NA NA 37.00 7.0
不要指望具有不同类型列的数据集上的奇迹。例如,summaryDF(iris)
没有意义。
此外,如果您的数据集中没有任何NA
值,您可能只能使用sapply
:
sapply(mtcars, summary)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Min. 10.40 4.000 71.1 52.0 2.760 1.513 14.50 0.0000 0.0000 3.000 1.000
## 1st Qu. 15.42 4.000 120.8 96.5 3.080 2.581 16.89 0.0000 0.0000 3.000 2.000
## Median 19.20 6.000 196.3 123.0 3.695 3.325 17.71 0.0000 0.0000 4.000 2.000
## Mean 20.09 6.188 230.7 146.7 3.597 3.217 17.85 0.4375 0.4062 3.688 2.812
## 3rd Qu. 22.80 8.000 326.0 180.0 3.920 3.610 18.90 1.0000 1.0000 4.000 4.000
## Max. 33.90 8.000 472.0 335.0 4.930 5.424 22.90 1.0000 1.0000 5.000 8.000
答案 1 :(得分:0)
就像使用 as.data.frame(describe(mydata))
包的 psych
一样简单。