【问题标题】:Display Stats in Table Using R使用 R 在表中显示统计信息
【发布时间】:2016-11-16 21:20:03
【问题描述】:

我正在使用 R 处理一些统计数据,例如平均值、中位数、相关性等。 有没有办法以表格的形式显示代码的结果? 这是我的代码示例:

cor(Moisture, pH)
cor(Moisture, NH3)
cor(Moisture, NH3DM) 
cor(Moisture, NDM) 
cor(Moisture, N)
cor(Moisture, TKN)
cor(Moisture, X.Ash)
cor(Moisture, CN)
cor(Moisture, EC1.5)

目前 R 控制台上的输出是:

> cor(Moisture, pH)
[1] -0.03154892
> cor(Moisture, NH3)
[1] -0.2814583
> cor(Moisture, NH3DM) 
[1] -0.1099614
> cor(Moisture, NDM) 
[1] 0.08306996
> cor(Moisture, N)
[1] -0.3728169
> cor(Moisture, TKN)
[1] 0.06975473
> cor(Moisture, X.Ash)
[1] -0.2749583
> cor(Moisture, CN)
[1] 0.002943823
> cor(Moisture, EC1.5)
[1] -0.4049512

我觉得这很混乱,对于我的班级,我们只打算使用 R

有什么想法吗?

【问题讨论】:

  • 将它们全部添加到 data.frame()(作为单列)中,同时设置 rownames()
  • 您可以通过将所有这些添加到一个 cor 函数中来节省一些输入,即 cor(Moisture, cbind(pH, NH3, NH3DM, ... etc)) 。这将返回一个命名向量。
  • 这 2 个解决方案有效,但我喜欢向量的输出。我认为我误解了 R 在输出方面实际上可以做什么——我认为它可以导出结果,而不仅仅是在控制台上显示它们。例如,我得到了输出,但是当我复制并粘贴到 excel 时,它是在单个列中,而不是每个变量的列中。有没有解决的办法?谢谢
  • 这个问题对于许多试图在 R 中进行单变量和双变量汇总统计的人来说是一个很好的问题(问题从单变量开始,然后切换到双变量)。如果我们有代码来复制这个请求的数据,或者至少有更多关于@Bake.G 想要显示什么样的表格内容的信息,那会容易得多。我将在下面介绍一个示例解决方案。

标签: r output


【解决方案1】:

这是一种将单变量(例如均值、标准差)和双变量(例如相关性)数据放入单个对象的解决方案,然后可以将其发送到您最喜欢的降价选项(例如 kable)并制作成漂亮的摘要表格。

我正在使用 mtcars 数据,因为它易于获取并且具有大量数字变量。我的示例代码使用 cmets 来解释我的想法。 descr() 函数非常适合提供摘要统计信息,但是为了可用性而提取数据有点烦人。另请注意,时尚()将相关性转换为文本值,这很好,因为此时它们用于表格而不是计算。

library(dplyr) # for pipes & select()
library(corrr) # for correlation stuff
library(summarytools) # for descr()
library(stringr)  # for str_to_title()

# load testing data
data("mtcars")
# subset data to drop the binary variables (or any others you don't want); could code as keep variables, but I have fewer here to drop
d1 <- mtcars %>% select(-vs, -am)
# sort so columns are in alphabetical order, this will help ensure data quality in the next steps
d1 <- d1[,order(colnames(d1))]

# get & store quant summary stats (summarytools function)
d2 <- descr(d1)
# save names for later
names.stats <- rownames(d2)
names.var <- colnames(d2)
# extract stored summary stats into usable dataframe
d3 <- as.vector(d2[1:7, 1:ncol(d2)])
d3 <- round(as.data.frame(matrix(d3, nrow=7, ncol=ncol(d2), byrow=FALSE)),2)
colnames(d3) <- str_to_title(names.var)

# save correlation matrix as dataframe
c1 <- d3 %>% select_if(is.numeric) %>% correlate() %>% shave(upper=TRUE) %>% fashion(leading_zeros=TRUE, decimals = 2, na_print = "—")
colnames(c1) <- paste0("Cor.", colnames(c1))

# transpose & add back summary stat names
d3 <- t(d3)
colnames(d3) <- names.stats[1:7]

# add correlations to rest of the summary stats
d3 <- cbind(d3, c1[,2:10])

对于 SO 来说不是最漂亮的输出,但这是你应该得到的。它已准备好发送到您最喜欢的降价函数中,以进行演示质量的表格制作。

       Mean Std.Dev   Min     Q1 Median     Q3    Max Cor.Carb Cor.Cyl Cor.Disp Cor.Drat Cor.Gear Cor.Hp Cor.Mpg Cor.Qsec Cor.Wt
Carb   2.81    1.62  1.00   2.00   2.00   4.00   8.00        —       —        —        —        —      —       —        —      —
Cyl    6.19    1.79  4.00   4.00   6.00   8.00   8.00     0.74       —        —        —        —      —       —        —      —
Disp 230.72  123.94 71.10 120.65 196.30 334.00 472.00     0.96    0.85        —        —        —      —       —        —      —
Drat   3.60    0.53  2.76   3.08   3.70   3.92   4.93     0.69    0.93     0.73        —        —      —       —        —      —
Gear   3.69    0.74  3.00   3.00   4.00   4.00   5.00     0.67    0.93     0.72     1.00        —      —       —        —      —
Hp   146.69   68.56 52.00  96.00 123.00 180.00 335.00     0.99    0.80     0.98     0.76     0.75      —       —        —      —
Mpg   20.09    6.03 10.40  15.35  19.20  22.80  33.90     0.91    0.92     0.93     0.92     0.91   0.95       —        —      —
Qsec  17.85    1.79 14.50  16.88  17.71  18.90  22.90     0.60    0.87     0.63     0.99     0.98   0.67    0.86        —      —
Wt     3.22    0.98  1.51   2.54   3.33   3.65   5.42     0.89    0.91     0.92     0.91     0.90   0.94    1.00     0.85      —

【讨论】:

    【解决方案2】:

    将要显示的所有数据存储在数据框 df 中。然后使用 stargazer 包。

    install.packages("stargazer")
    library(stargazer)
    stargazer(df, align = TRUE, type = "text")
    

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 2021-05-28
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多