我认为这是一个非常简单的转变,但我无法做到正确:
我在数据表中有两列。一个包含日期,另一个包含一些唯一的数字。我基本上是特定月份和年份的行数。
我想知道2011 - 02年的阅读次数,然后是2011-03的阅读次数,依此类推。
答案 0 :(得分:5)
以下是一些免费数据:
set.seed(1)
df <- data.frame(
x = sample(Sys.Date()-0:120, 20, TRUE),
y = sample(100, 20, TRUE)
)
我们可以通过在by
参数中使用重新格式化的日期,使用 data.table 轻松完成此任务。
library(data.table)
setDT(df)[, .(N = .N), by = .(month = format(x, "%Y-%m"))]
# month N
# 1: 2015-09 5
# 2: 2015-08 4
# 3: 2015-07 7
# 4: 2015-06 4
或者使用基础R aggregate()
aggregate(list(N = df$y), list(month = format(df$x, "%Y-%m")), length)
# month N
# 1 2015-06 4
# 2 2015-07 7
# 3 2015-08 4
# 4 2015-09 5
答案 1 :(得分:1)
这是使用group_by
的不同方法。如果您有兴趣,我还可以使用lubridate
来设置POSIX日期对象。
library(lubridate)
library(dplyr)
# create some data
data <- data.frame("dates" = ymd(c("2014-05-01","2014-05-01","2014-05-01","2014-06-02","2014-06-02")),
"values" = c(1,3,5,2,5))
# this is the actual summarize.
data %>% group_by(dates) %>% summarise(n = n())
产量
dates n
(time) (int)
1 2014-05-01 3
2 2014-06-02 2