假设我们有以下数据框:
ShippedDate OrderID Subtotal
1 1996-07-16 00:00:00 10248 440.00
2 1996-07-10 00:00:00 10249 1863.40
...
25 1996-08-06 00:00:00 10272 1456.00
26 1996-08-12 00:00:00 10273 2142.40
...
51 1996-09-11 00:00:00 10298 3127.00
52 1996-09-13 00:00:00 10299 349.50
...
78 1996-10-14 00:00:00 10325 1497.00
79 1996-10-14 00:00:00 10326 982.00
80 1996-10-14 00:00:00 10327 2262.50
81 1996-10-17 00:00:00 10328 1168.00
etc
1 1996-07-16 00:00:00 10248 440.00 2 1996-08-12 00:00:00 10273 2142.40 3 1996-09-13 00:00:00 10299 349.50 4 1996-10-14 00:00:00 10327 2262.50
1 1996-07 2303.4 2 1996-08 3598.4 3 1996-09 3476.5 4 1996-10 5909.5
答案 0 :(得分:3)
我建议您创建一个year-month
变量,然后在所有其余操作中使用它,以避免一遍又一遍地重新计算它。
这是一种可能的data.table
方法
创建变量
library(data.table)
setDT(df)[, YearMonth := paste0(year(ShippedDate), "-", month(ShippedDate))]
从每个月开始随机抽样
df[, .SD[sample(seq_len(.N), 1)], by=YearMonth]
# YearMonth ShippedDate OrderID Subtotal
# 1: 1996-7 1996-07-16 00:00:00 10248 440.0
# 2: 1996-8 1996-08-12 00:00:00 10273 2142.4
# 3: 1996-9 1996-09-11 00:00:00 10298 3127.0
# 4: 1996-10 1996-10-14 00:00:00 10326 982.0
每年的总和
df[, sum(Subtotal), by=YearMonth]
# YearMonth V1
# 1: 1996-7 2303.4
# 2: 1996-8 3598.4
# 3: 1996-9 3476.5
# 4: 1996-10 5909.5
答案 1 :(得分:1)
您可以选择每月和每年大小为n
(在您的情况下为1)的随机样本(如果您的原始数据存储为df
):
library(zoo)
library(dplyr)
df_g <- group_by(df, as.character(as.yearmon(ShippedDate)))
sample_n(df_g, n, replace = FALSE)
您可以按如下方式计算每月和每年的总和(使用提供的数据):
summarise(df_g, sum = sum(Subtotal))
Source: local data frame [4 x 2]
year_mon sum
1 Aug 1996 3598.4
2 Jul 1996 2303.4
3 Okt 1996 5909.5
4 Sep 1996 3476.5
答案 2 :(得分:0)
我会通过以下方式为每个月选择一个随机行:
df[tapply(1:nrow(df), substr(df$ShippedDate,1,7), FUN= sample, size= 1),]
获取每个月的小计列总数:
result <- tapply(1:nrow(df), substr(df$ShippedDate,1,7), FUN= sum)
如果您需要data.frame中的“结果”月份和总数:
data.frame(names(result), result)
我真的需要学习使用plyr,但是现在我正在努力学习普通的R。