如何解决根据数字对齐值并忽略减号/前缀
我想要以表格形式输出数据,但我正在努力以一种忽略负值前面的减号的方式对齐这些值。研究了一段时间无果。希望有一个简单的解决方案。
#install.packages("stargazer")
library(stargazer)
df<-as.data.frame(array(data=c(1.33,-1.23,23.4343,-3000)))
stargazer(df,type = "text",title = "Align me plz",rownames = FALSE,colnames = FALSE,summary = FALSE
)
解决方法
这并不能解决问题,但可能指出了罪魁祸首。首先,当输出为 "text"
时,它看起来没有对齐选项。我试图强制对齐将数字更改为字符串,如下所示:
df<-data.frame(x=c(1.33,-1.23,23.4343,-3000))
format_decimal <- function(x,digits=2){
s <- stringr::str_split(as.character(x),"\\.",simplify=TRUE)
mchar <- apply(nchar(s),2,max)
sprintf(paste0("%",mchar[1]+digits,".",digits,"f"),x)
}
library(dplyr)
df <- df %>% mutate(across(where(is.numeric),format_decimal))
当您打印数据框(在 stargazer 之外)时,您会看到这些值是左对齐的(当您打印固定数量的小数位时,这会使它们十进制对齐)。
df
# x
# 1 1.33
# 2 -1.23
# 3 23.43
# 4 -3000.00
但是,当您在 stargazer 中使用相同的数据时,数据现在会居中。
stargazer(df,type = "text",title = "Align me plz",rownames = FALSE,colnames = FALSE,summary = FALSE
)
# Align me plz
# ========
# 1.33
# -1.23
# 23.43
# -3000.00
# --------
因此,它看起来像是函数内部的修剪和填充值,使它们居中。为了解决这个问题,你可能不得不摆弄包的内部结构。在那里定义了一个函数,称为 .trim
,它可以去除前导和尾随空格。我试图将其重新定义为 .trim = function(x)x
,但这也没有解决问题。因此,可能需要与更改其他内容或完全更改其他内容相协调地进行更改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。