3

我想在 a 中包含符号 % ,data.frame以便data.frame稍后在列的每一行的print(xtable(data.frame....))数值旁边打印 % 符号。data2Values in %

数据示例:

data1 <- rnorm(5,10,2)
data2 <- round(rexp(5,2),1)
frameData <- data.frame(data1,data2)
colnames(frameData) <- c("Measurement","Values in %")

我尝试过这样的事情:

data1 <- rnorm(5,10,2)
data2 <- round(rexp(5,2),1)
data3 <- rep("%",5)
frameData <- data.frame(data1,data2,data3)
colnames(frameData) <- c("Measurement","Values in %","")

但是我不能让标志足够近,后来print(xtable(frameData....))距离放大了。

4

2 回答 2

5

@AnandaMahto 使用 base R 给出了一个很好的答案。

如果您愿意使用库,则有一种更简单的方法。该scales库有一堆用于格式化数字的函数:

library(scales)
> percent(seq(10)/10)
 [1] "10%"  "20%"  "30%"  "40%"  "50%"  "60%"  "70%"  "80%"  "90%"  "100%"

最后,因为数字类型不能保存 % 值,您可以向 data.frame 添加一个属性,然后在打印时使用它:

attr(frameData,"pctCols") <- c(2)
printPct <- function(x) { require(taRifx); japply(x,attr(x,"pctCols"),percent) }
> printPct(frameData)
  Measurement Values in %
1   11.992833        160%
2   12.556494        NaN%
3   10.837724        200%
4    9.141887        200%
5    8.056046        100%
于 2013-09-28T13:07:09.477 回答
4

我可能只是建议使用sprintf,它可以让你很好地控制这样的格式。

这是一个基本示例:

frameData$`Values in %` <- sprintf("%1.1f%%", frameData$`Values in %`)
frameData
#   Measurement Values in %
# 1   13.423642        0.2%
# 2   12.464654        0.2%
# 3   10.805657        0.2%
# 4   11.188839        1.6%
# 5    9.248013        0.2%
于 2013-09-28T08:07:18.337 回答