如何格式化R表的行名?



考虑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是科学格式的。我如何强制它们不使用科学记数法?我已经尝试在format, formatCprettyNum中包装上面的整个命令,但所有这些都是格式化频率

感谢joran为我们指出了答案的路径。我在这里详细说明一下:

cutdig.lab参数从默认的3更改为4,解决了这个特定的模型以及我的实际问题:

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

现在加起来是100!:)

这并没有完全回答您所问的问题,但向您展示了一个可能的替代方案:使用存在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 

在这里,我们也得到了我认为每个bin的"正确"值。


作为我关于"正确"值的陈述的粗略证明,考虑我们基于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

相关内容

  • 没有找到相关文章

最新更新