如何格式化R表的row.names?

时间:2014-03-28 17:05:53

标签: r format posixct scientific-notation

考虑这个x日期集:

set.seed(1234)
x <- sample(1980:2010, 100, replace = T)
x <- strptime(x, '%Y')
x <- strftime(x, '%Y')

以下是这些日期年份的分布:

> table(x)
x
1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1994 
   4    4    3    3    6    4    3    4    5   12    1    1    1    2 
1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 
   9    4    2    1    4    4    2    1    4    1    4    3    4    3 
2010 
   1 

现在说我想把他们分组十年。为此,我使用cut函数:

> table(cut(x, seq(1980, 2010, 10)))
Error in cut.default(x, seq(1980, 2010, 10)) : 'x' must be numeric

好的,让我们强制x为数字:

> table(cut(as.numeric(x), seq(1980, 2010, 10)))

(1.98e+03,1.99e+03]    (1.99e+03,2e+03]    (2e+03,2.01e+03] 
                 45                  28                  23 

现在,正如您所看到的,该表的row.names是科学格式。 我如何强迫他们不要用科学记数法?我已经尝试在formatformatCprettyNum内包装整个命令,但是所有这些都是格式化频率。

2 个答案:

答案 0 :(得分:3)

感谢joran指出了答案的路径。我在这里详细说明了记录:

cut的{​​{1}}参数从默认值3更改为4解决了这个特定的模型以及我的真正问题:

dig.lab

顺便说一下,为了计算1980年,应该包括> table(cut(as.numeric(x), seq(1980, 2010, 10), dig.lab = 4)) (1980,1990] (1990,2000] (2000,2010] 45 28 23 参数:

include.lowest

现在它总和为100! :)

答案 1 :(得分:1)

这并没有完全回答您提出的问题,但向您展示了一种可能的选择:使用cut.Date方法的事实:

set.seed(1234)
x <- sample(1980:2010, 100, replace = T)
x <- strptime(x, '%Y')
out <- table(cut(x, "10 years"))
out
# 
# 1980-01-01 1990-01-01 2000-01-01 2010-01-01 
#         48         25         26          1 

在这里,我们也得到了我认为的&#34;正确的&#34;每个箱子的价值。


作为我关于&#34;纠正&#34;的陈述的粗略理由。值,考虑我们根据table手动计算得到的值:

y <- strftime(x, '%Y')
Tab <- table(y)
Tab
# y
# 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1994 1995 1996 
#    4    4    3    3    6    4    3    4    5   12    1    1    1    2    9    4 
# 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2010 
#    2    1    4    4    2    1    4    1    4    3    4    3    1 
sum(Tab[grepl("198", names(Tab))])
# [1] 48
sum(Tab[grepl("199", names(Tab))])
# [1] 25
sum(Tab[grepl("200", names(Tab))])
# [1] 26
sum(Tab[grepl("201", names(Tab))])
# [1] 1