考虑这个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
,formatC
和prettyNum
内包装整个命令,但是所有这些都是格式化频率。
答案 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