summary()函数的正常输出如下:
> summary(iris[, -5])
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500 我想转置它,然后把它放到一个数据帧中,所以我这样做了:
> trans <- as.data.frame(t(as.matrix(unclass(summary(iris[, -5])))))
> trans
V1 V2 V3 V4 V5
Sepal.Length Min. :4.300 1st Qu.:5.100 Median :5.800 Mean :5.843 3rd Qu.:6.400
Sepal.Width Min. :2.000 1st Qu.:2.800 Median :3.000 Mean :3.057 3rd Qu.:3.300
Petal.Length Min. :1.000 1st Qu.:1.600 Median :4.350 Mean :3.758 3rd Qu.:5.100
Petal.Width Min. :0.100 1st Qu.:0.300 Median :1.300 Mean :1.199 3rd Qu.:1.800
V6
Sepal.Length Max. :7.900
Sepal.Width Max. :4.400
Petal.Length Max. :6.900
Petal.Width Max. :2.500 现在问题来了。我认为,更符合逻辑的格式应该是:
> trans <- cbind(rownames(trans), trans)
> rownames(trans) <- NULL
> colnames(trans) <- c("Treatment", "Minimum", "1st Quartile", "Median", "Mean", "3rd Quartile", "Maximum")
> trans
Treatment Minimum 1st Quartile Median Mean 3rd Quartile
1 Sepal.Length Min. :4.300 1st Qu.:5.100 Median :5.800 Mean :5.843 3rd Qu.:6.400
2 Sepal.Width Min. :2.000 1st Qu.:2.800 Median :3.000 Mean :3.057 3rd Qu.:3.300
3 Petal.Length Min. :1.000 1st Qu.:1.600 Median :4.350 Mean :3.758 3rd Qu.:5.100
4 Petal.Width Min. :0.100 1st Qu.:0.300 Median :1.300 Mean :1.199 3rd Qu.:1.800
Maximum
1 Max. :7.900
2 Max. :4.400
3 Max. :6.900
4 Max. :2.500 但是,如您所见,每个单元格中的列名都是重复的。这是一件非常没有吸引力的事情。因此,我的问题是,是否可以从data.frame中删除此部分,只留下以下内容:
Treatment Minimum 1st Quartile Median Mean 3rd Quartile
1 Sepal.Length 4.300 5.100 5.800 5.843 6.400
2 Sepal.Width 2.000 2.800 3.000 3.057 3.300
3 Petal.Length 1.000 1.600 4.350 3.758 5.100
4 Petal.Width 0.100 0.300 1.300 1.199 1.800
Maximum
1 7.900
2 4.400
3 6.900
4 2.500 这样做的一个好处是,我的data.frame将是数字的(可能),以及整体更整洁。我该怎么做呢?
发布于 2020-10-25 20:33:15
有几个包允许您以这种方式汇总数据。例如,我的modelsummary package (自我推广警报!)允许您执行以下操作:
library(modelsummary)
datasummary(All(iris) ~ Min + P25 + P50 + Mean + P75 + Max,
data = iris,
output = "data.frame")
#> Min P25 P50 Mean P75 Max
#> 1 Sepal.Length 4.30 5.10 5.80 5.84 6.40 7.90
#> 2 Sepal.Width 2.00 2.80 3.00 3.06 3.30 4.40
#> 3 Petal.Length 1.00 1.60 4.35 3.76 5.10 6.90
#> 4 Petal.Width 0.10 0.30 1.30 1.20 1.80 2.50删除output参数将生成一个如下所示的HTML表:

并将其称为:
datasummary_skim(iris)生成以下内容:

https://stackoverflow.com/questions/64523641
复制相似问题