【问题标题】:Formatting a table in R with special symbols in columns用列中的特殊符号格式化 R 中的表
【发布时间】:2021-08-16 08:38:34
【问题描述】:

所以我在R 中进行了一些分析,我将其存储在data.frame() 中,并且在程序结束时我想为用户打印一个易于阅读的表格。我可以将数据框返回给用户,但我希望列标题名称带有空格或特殊字符(特别是我希望有一个百分号)。所以我的想法是我可以使用print()paste() 函数来输出一种表格格式。

所以在运行代码结束时,我希望输出看起来完全像下面这样:

     X       Y   P/E%
0.66120836 0.379 0.99
0.57320298 0.028 0.50
0.77160759 0.024 0.96
0.01532545 0.565 0.37
0.96046884 0.066 0.77

这里是一些示例代码来生成我想要输出的数据:

x = runif(5)
y = round(runif(5),3)
z = round(runif(5),2)

现在我可以使用data.frame() 命令,但它不允许我使用像P/E% 这样的列标题,例如

A = data.frame(X=x,Y=y,PE=z)

因为它不喜欢 / 或 % 符号。我能想到的解决问题的方法如下:

temp = paste("X","Y","P/E% \n",sep=" ")
for(i in 1:5){
    temp = paste(temp,paste(x[i],y[i],z[i],"\n",sep=" "),sep=" ")
}

但如果列标题很长或位数不同,则间距很奇怪。如果我使用我喜欢的粘贴选项,有没有办法让它无论数据的形状或位数如何,都能很好地对齐列?比如左对齐还是右对齐?

最后,这段代码将进入一个R闪亮的应用程序,因此能够解决这个问题而不必让用户加载一个包来解决它会非常好。

【问题讨论】:

  • 由于您将其放入 Shiny,您需要查看 renderTable,它已经为您解决了这个问题(通过 xtable,您也可以自己使用它)。 knitr::kable 也可用于格式化表格。

标签: r


【解决方案1】:

如果被引用,列名中可以包含特殊符号(如果禁用列名的有效性检查):

A = data.frame(X=x, Y=y, 'P/E%'=z, check.names=FALSE)

然后,您需要始终在 $ 调用中使用引号来获取访问权限。 $-函数接受三种类型的引号中的任何一种,只要它们匹配即可:

a$`P/E%`

“[[”函数旨在处理带引号的参数,但不要使用反引号:

A[['P/E%']]  # so this is one situation where $ is better than "[["

如果你有一个实际的用例,它需要更完整地呈现,而不仅仅是说“需要与 Shiny 一起工作”,但就软件包而言,$[[ 都差不多是“基础" 尽你所能。

【讨论】:

  • 不在我的机器上:A$'P/E%' 返回[1] 0.95 0.88 0.10 0.19 0.55
  • 你是对的,对不起!我猜这只是整个对象,普通引号肯定会表示字符串。
  • 事实上,在带有“[[”的列名周围使用反引号会引发错误。
  • 不,我只是想让你们都知道它将在 Shiny 中,所以我不想使用包来解决这个问题。包装部分很重要,我可以不提 Shiny 就说出来。
猜你喜欢
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
相关资源
最近更新 更多