R stargazer中的十进制数

时间:2016-10-08 21:08:02

标签: r stargazer

我正在使用R包stargazer在Latex中生成表。它工作得很好,但我无法弄清楚如何正确格式化我的数字。我希望所有数字都显示一个小数位(例如1.0,0.1,10.5等)。因此,我使用选项digits = 1.但是,对于像1这样的确切数字,这给了我1而不是1.0。即使对于确切的数字(1.0而不是1),如何获得小数位?

3 个答案:

答案 0 :(得分:6)

使用stargazer后,您可以使用正则表达式添加小数位。这是一个例子。您可能需要稍微更改正则表达式字符串,具体取决于您使用stargazer生成的摘要类型,但由于问题中不包含最小示例,我能做的最好的方法是给出此方法的一般示例:

var countryArray = [{
 "country" : 'Indonesia',
 "state" : ['DKI','Bali'],
},
 {
 "country" : 'Malaysia',
 "state" : ['Penang','Johor','Kelantan'],
}];

在此示例中,模式“&([0-9] +)”查找“&”后跟一串数字,后跟空格。然后将其替换为“&”,它找到的相同数字组(使用// 1),句点(//。因为句点必须被转义,因为它们是正则表达式中的特殊字符),小数零和a空间。

由观星者制作的一些不同的摘要格式可能包含您可能需要包含在搜索字符串中的其他内容,例如数字后跟除空格之外的字符(例如逗号)。或者,在{{1}}之前没有数字的数字可能需要在某些情况下替换。

无论如何,一般方法都是一样的。

答案 1 :(得分:3)

感谢您推动更加完整的答案,wolfsatthedoor。 我自己一直在想这个问题很长一段时间,看起来这个观星代码是故意写的。

使用

查看源代码
trace(stargazer:::.stargazer.wrap, edit = T)

在第4485行显示(可能会略有不同,具体取决于确切的版本).summ.stat.publish.statistic检查返回的值.is.all.integers.如果是这种情况,最终值将以0位数舍入(硬-coded)。

else if (which.statistic == "median") {
        median.value <- median(temp.var, na.rm = TRUE)
        if (.is.all.integers(temp.var) == FALSE) {
          how.much.to.round <- .format.s.round.digits
        }
        else {
          if (.is.all.integers(median.value) == TRUE) {
            how.much.to.round <- 0
          }
          else {
            how.much.to.round <- 1
          }
        }
        return(.iround(median.value, how.much.to.round))
      }

要更改此行为,您必须将所有how.much.to.round更改为.format.s.round.digits,这是使用digits命令指定的值。您必须分别对所有汇总统计数据执行此操作,即中位数,最小值,最大值和p,行~4510到4570.这也可确保列N不会带有不必要的数字。

保存的自定义观星功能应该表现如下(注意:每次重启R-Session时都需要重新进行更改 - 你可以通过导出功能来防止这种情况):

stargazer((cbind(A = c(1,1,1,1), B = c(3,4,3,3))), summary = T, digits = 2, header = F, type = "text")
# ===================================
# Statistic N Mean St. Dev. Min  Max 
# -----------------------------------
# A         4 1.00   0.00   1.00 1.00
# B         4 3.25   0.50   3.00 4.00
# -----------------------------------

stargazer((cbind(A = c(1,1,1,1), B = c(3,4,3,3))), summary = T, digits = 2, header = F)
# \begin{table}[!htbp] \centering 
#   \caption{} 
#   \label{} 
# \begin{tabular}{@{\extracolsep{5pt}}lccccc} 
# \\[-1.8ex]\hline 
# \hline \\[-1.8ex] 
# Statistic & \multicolumn{1}{c}{N} & \multicolumn{1}{c}{Mean} & \multicolumn{1}{c} {St. Dev.} & \multicolumn{1}{c}{Min} & \multicolumn{1}{c}{Max} \\ 
# \hline \\[-1.8ex] 
# A & 4 & 1.00 & 0.00 & 1.00 & 1.00 \\ 
# B & 4 & 3.25 & 0.50 & 3.00 & 4.00 \\ 
# \hline \\[-1.8ex] 
# \end{tabular} 
# \end{table} 

答案 2 :(得分:0)

(在打开寻星仪之前)如果要显示脚本中指定的所有数字,只需替换例如:

else if (which.statistic == "min") {
        if (.is.all.integers(temp.var) == FALSE) {
          how.much.to.round <- .format.s.round.digits
        }
        else {
          how.much.to.round <- .format.s.round.digits
        }
        return(.iround(min(temp.var, na.rm = TRUE), 
                       how.much.to.round))
      }

为此:

   else if (which.statistic == "min") {
        return(.iround(min(temp.var, na.rm = TRUE), .format.s.round.digits))
      }

您可以将min替换为max等。这大约在4530-4576行中