【问题标题】:R stargazer: Different decimalsR stargazer:不同的小数
【发布时间】:2016-10-13 08:01:23
【问题描述】:

我在 R 中的 stargazer 输出有问题。

这是我的原始数据框:

Rank  p     LMax   10%   5%  1%   
var1  0.427  24.25 21.8 27.4 31.5
var2  0.228  7.23  11.5 12.2 16.7

观星者创造了什么:

stargazer(data_summary, summary=FALSE,digits = 3)

Rank  p      LMax   10%    5%     1%   
var1  0.427  24.250 21.800 27.400 31.500
var2  0.248  7.230  11.500 12.200 16.700

保留 p 的三位数字但其他数字保留 2 位非常重要。 digits = 2 并不能解决问题,因为 p 只有两位数。

想要的输出:

Rank  p      LMax   10%    5%     1%   
var1  0.427  24.25 21.80 27.40 31.50
var2  0.248  7.23  11.50 12.20 16.70

知道如何解决这个问题吗?

【问题讨论】:

  • 如果列是数字,您可以使用:dat[3:5] <- round(dat[3:5], 2)
  • 我知道我可以操纵数据框,但不知何故,观星者只能将一个十进制结构应用于所有值?我希望它可以简单地打印数据框。
  • 如果您希望原始数据帧“按原样”打印,为什么不直接使用digits=NA?根据观星手册,这应该完全放弃四舍五入。我相信完全省略整个数字参数可能会产生相同的结果。
  • @OlliJ,看到但它响应“粘贴错误(first.part,.format.decimal.character,decimal.part,sep =“”):找不到对象'decimal.part' "
  • 这里有同样的问题!

标签: r stargazer


【解决方案1】:

一个 hacky 解决方案是将您的数据帧转换为字符向量,每个字符向量都有适当的小数点数。

data_summary <- read.table(text = "
Rank  p     LMax   p10   p5  p1   
var1  0.427  24.25 21.8 27.4 31.5
var2  0.228  7.23  11.5 12.2 16.7", header = TRUE, stringsAsFactors = FALSE)

我们编写一个匿名函数,给定一个整数 x(小数点数)和一个数字向量 y,返回一个字符向量:

out <- mapply(function(x, y) sprintf(sprintf("%%.0%if", y), x), 
  data_summary[-1],
  c(3, 2, 2, 2, 2))
#      p       LMax    p10     p5      p1     
# [1,] "0.427" "24.25" "21.80" "27.40" "31.50"
# [2,] "0.228" "7.23"  "11.50" "12.20" "16.70"

将值绑定到行标签:

data_summary_out <- as.data.frame(cbind(data_summary[, 1], out))
data_summary_out <- setNames(data_summary_out, names(data_summary))

stargazer 现在为您提供所需的输出:

library(stargazer)
stargazer(data_summary_out,
          type = "text",
          summary = FALSE,
          digits = NA)
# ====================================
#   Rank   p   LMax   p10   p5    p1  
# ------------------------------------
# 1 var1 0.427 24.25 21.80 27.40 31.50
# 2 var2 0.228 7.23  11.50 12.20 16.70
# ------------------------------------

【讨论】:

  • 你是如何从outdata_summary_out 的?我猜是bind_cols()?感谢您提供所有这些解决方案,顺便说一句,这很棒。
  • 因为当我 bind_cols() 我不断收到 Argument 2 must have names 的错误。我正在尝试将名称从 out 复制到 data_summary,但我遇到了一些麻烦
  • 我在回答中跳过了几个步骤。请查看修改。
猜你喜欢
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 2020-08-12
  • 1970-01-01
相关资源
最近更新 更多