R 中的 colsum 条件?
colsum conditions in R?
我有按周拆分的数据,想将其更改为每月 and/or 季度数据。有没有我可以使用的条件来根据日期或周对列数据求和?鉴于我有 1962-2016 年的数据并且不想合并所有周,我不确定如何根据周数进行计算。以下是我的数据框的设置方式,非常感谢任何建议。
好的,所以这是按周过滤的,我有 52 或 53 周的年份。建议的解决方案似乎确实解决了这些问题,即使有些日期是结束日期,有些是前一年的日期。如果我可以按年和月创建一个新列并对第 7-13 列中的列值求和(按列而不是行)
library(dplyr)
# First create new variable for just the month and year
df$Month_Yr <- format(as.Date(df$Date), "%Y-%m")
# Then group by (dplyr) the months and sum over intended variable
df %>% group_by(Month_Yr) %>% summarise(sum_pideaths = sum(pideaths, na.rm = TRUE))
注意:这只会对 pideaths
列求和。如果要对所有列求和,首先 select 数字列,然后使用 summarise_all()
:
df %>% select(Month_Yr,**numeric_cols**) %>% group_by(Month_Yr) %>% summarise_all(funs(sum = sum(na.rm = TRUE)))
as.POSIXlt
函数提供了一个列表,可以提取该列表以给出 C-like 的数字月份值,因为它们以 0 开头表示一月。这应该不是分裂的问题。有关选项,请参阅“详细信息”部分,但我可以告诉您,没有季度选项。
这是交付周数的代码:
as.POSIXlt( Sys.Date()+1:60 )$yday %/% 7
[1] 13 13 13 13 13 14 14 14 14 14 14 14 15 15 15 15 15 15 15 16 16 16 16 16 16 16 17 17 17 17
[31] 17 17 17 18 18 18 18 18 18 18 19 19 19 19 19 19 19 20 20 20 20 20 20 20 21 21 21 21 21 21
但请注意,这不一定与您选择的周开始时间一致。您可能需要减去一年中第一天的数字工作日以使其正确对齐。 (星期日是第 0 个工作日。)
as.POSIXlt( Sys.Date()+1:60 - as.POSIXlt( as.Date( paste0( format(Sys.Date(), "%Y"),"-01-01")))$wday )$yday %/% 7
[1] 13 13 13 13 13 13 14 14 14 14 14 14 14 15 15 15 15 15 15 15 16 16 16 16 16 16 16 17 17 17
[31] 17 17 17 17 18 18 18 18 18 18 18 19 19 19 19 19 19 19 20 20 20 20 20 20 20 21 21 21 21 21
提供可打印标签的另一个选项,zoo::as.yearmon
。
as.POSIXlt( Sys.Date()+1:60 )$mon
[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
[46] 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5
zoo::as.yearmon( Sys.Date()+1:60 )
[1] "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018"
[9] "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018"
[17] "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018"
[25] "Apr 2018" "Apr 2018" "Apr 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
[33] "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
[41] "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
[49] "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
[57] "May 2018" "May 2018" "Jun 2018" "Jun 2018"
zoo 包还有一个 as.yearqtr
功能:
zoo::as.yearqtr( Sys.Date()+seq(0, 180, by=30) )
#[1] "2018 Q2" "2018 Q2" "2018 Q2" "2018 Q3" "2018 Q3" "2018 Q3" "2018 Q3"
"Under the hood"(或 "bonnet" 视情况而定)此函数实际上也提供数值,但 class 具有特殊的打印方法:
unclass( zoo::as.yearqtr( Sys.Date()+seq(0, 180, by=30) ) )
[1] 2018.25 2018.25 2018.25 2018.50 2018.50 2018.50 2018.50
我有按周拆分的数据,想将其更改为每月 and/or 季度数据。有没有我可以使用的条件来根据日期或周对列数据求和?鉴于我有 1962-2016 年的数据并且不想合并所有周,我不确定如何根据周数进行计算。以下是我的数据框的设置方式,非常感谢任何建议。
好的,所以这是按周过滤的,我有 52 或 53 周的年份。建议的解决方案似乎确实解决了这些问题,即使有些日期是结束日期,有些是前一年的日期。如果我可以按年和月创建一个新列并对第 7-13 列中的列值求和(按列而不是行)
library(dplyr)
# First create new variable for just the month and year
df$Month_Yr <- format(as.Date(df$Date), "%Y-%m")
# Then group by (dplyr) the months and sum over intended variable
df %>% group_by(Month_Yr) %>% summarise(sum_pideaths = sum(pideaths, na.rm = TRUE))
注意:这只会对 pideaths
列求和。如果要对所有列求和,首先 select 数字列,然后使用 summarise_all()
:
df %>% select(Month_Yr,**numeric_cols**) %>% group_by(Month_Yr) %>% summarise_all(funs(sum = sum(na.rm = TRUE)))
as.POSIXlt
函数提供了一个列表,可以提取该列表以给出 C-like 的数字月份值,因为它们以 0 开头表示一月。这应该不是分裂的问题。有关选项,请参阅“详细信息”部分,但我可以告诉您,没有季度选项。
这是交付周数的代码:
as.POSIXlt( Sys.Date()+1:60 )$yday %/% 7
[1] 13 13 13 13 13 14 14 14 14 14 14 14 15 15 15 15 15 15 15 16 16 16 16 16 16 16 17 17 17 17
[31] 17 17 17 18 18 18 18 18 18 18 19 19 19 19 19 19 19 20 20 20 20 20 20 20 21 21 21 21 21 21
但请注意,这不一定与您选择的周开始时间一致。您可能需要减去一年中第一天的数字工作日以使其正确对齐。 (星期日是第 0 个工作日。)
as.POSIXlt( Sys.Date()+1:60 - as.POSIXlt( as.Date( paste0( format(Sys.Date(), "%Y"),"-01-01")))$wday )$yday %/% 7
[1] 13 13 13 13 13 13 14 14 14 14 14 14 14 15 15 15 15 15 15 15 16 16 16 16 16 16 16 17 17 17
[31] 17 17 17 17 18 18 18 18 18 18 18 19 19 19 19 19 19 19 20 20 20 20 20 20 20 21 21 21 21 21
提供可打印标签的另一个选项,zoo::as.yearmon
。
as.POSIXlt( Sys.Date()+1:60 )$mon
[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
[46] 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5
zoo::as.yearmon( Sys.Date()+1:60 )
[1] "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018"
[9] "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018"
[17] "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018" "Apr 2018"
[25] "Apr 2018" "Apr 2018" "Apr 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
[33] "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
[41] "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
[49] "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018" "May 2018"
[57] "May 2018" "May 2018" "Jun 2018" "Jun 2018"
zoo 包还有一个 as.yearqtr
功能:
zoo::as.yearqtr( Sys.Date()+seq(0, 180, by=30) )
#[1] "2018 Q2" "2018 Q2" "2018 Q2" "2018 Q3" "2018 Q3" "2018 Q3" "2018 Q3"
"Under the hood"(或 "bonnet" 视情况而定)此函数实际上也提供数值,但 class 具有特殊的打印方法:
unclass( zoo::as.yearqtr( Sys.Date()+seq(0, 180, by=30) ) )
[1] 2018.25 2018.25 2018.25 2018.50 2018.50 2018.50 2018.50