2013-09-28 150 views
3

我希望在data.frame中包含符号%,以便data.frame稍后打印为print(xtable(data.frame....)),其中%符号紧接着data2的数值列的每一行Values in %在data.frame中包含%或任何其他符号旁边的数字值R

数据例如:

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

我可能会建议使用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% 
5

@AnandaMahto已使用基本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% 
相关问题