簡體   English   中英

R 觀星者:不同的小數

[英]R stargazer: Different decimals

我的 R 中的 stargazer output 有問題。

這是我原來的 dataframe:

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

觀星者創造了什么:

觀星者(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 只有兩位數。

所需的 output:

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

知道如何解決這個問題嗎?

一個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
# ------------------------------------

@weihuangwong 的解決方案很好,但可以進一步提煉。 簡單的答案是,如果您的表中的每列已經具有所需數量的有效數字,請使用digits = NA參數。 所以改編原來的例子:

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

根據觀星者的文檔:

NA 值表示根本不應該進行四舍五入,並且應該報告所有可用的小數位。

如果您的列尚未四舍五入到所需的位數,則可以使用 tidyverse 方法來替代目前所描述的方法。 以原始表格列標簽為例(但假設列未按需要四舍五入):

library(dplyr)
library(stargazer)

data_summary <- data_summary %>% 
    mutate(across('p'), round, 3)) %>%
    mutate(across('LMax'), round, 2)) %>%
    mutate(across(c('10%', '5%', '1%'), round, 1))
      
stargazer(df, summary = FALSE, digits = NA)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM