R 使用“按日期求和”;如果;陈述

R 使用“按日期求和”;如果;陈述,r,if-statement,R,If Statement,我试图使用“if”语句在数据帧中的两个日期之间求和 date = seq(as.Date("2000-01-01"), as.Date("2000-01-31"), by="days") nums = seq(1, 1, length.out = 31) df = data.frame(date, nums) if(df$date >= as.Date("2000-01-01") && df$date <= as.Date("2000-01-07")){ sum

我试图使用“if”语句在数据帧中的两个日期之间求和

date = seq(as.Date("2000-01-01"), as.Date("2000-01-31"), by="days")
nums = seq(1, 1, length.out = 31)
df = data.frame(date, nums)

if(df$date >= as.Date("2000-01-01") && df$date <= as.Date("2000-01-07")){
  sum(df$nums)
}
date=seq(截止日期(“2000-01-01”),截止日期(“2000-01-31”),by=“天”)
nums=seq(1,1,length.out=31)
df=数据帧(日期,nums)

如果(df$date>=as.date(“2000-01-01”)&&df$date,我们可以对逻辑向量进行求和。请注意,我们只使用一个
&
来返回逻辑向量

sum(df$date >= as.Date("2000-01-01") & df$date <= as.Date("2000-01-07"))

sum(df$date>=as.date(“2000-01-01”)&df$date=as.date(“2000-01-01”)&df$date我们只需对逻辑向量进行
sum
。请注意,我们只使用一个
&
来返回逻辑向量

sum(df$date >= as.Date("2000-01-01") & df$date <= as.Date("2000-01-07"))
sum(df$date>=as.date(“2000-01-01”)&df$date=as.date(“2000-01-01”)&df$date
库(dplyr)
#你的数据
日期=序号(截止日期(“2000-01-01”)、截止日期(“2000-01-31”)、by=“天”)
nums=seq(1,1,length.out=31)
df=数据帧(日期,nums)
#答复
df%>%
过滤器(日期>='2000-01-01'和日期%
汇总(总和=总和(nums))
库(dplyr)
#你的数据
日期=序号(截止日期(“2000-01-01”)、截止日期(“2000-01-31”)、by=“天”)
nums=seq(1,1,length.out=31)
df=数据帧(日期,nums)
#答复
df%>%
过滤器(日期>='2000-01-01'和日期%
汇总(总和=总和(nums))

只需使用此功能:

sum_by_dates <- function(frame, date_column, num_column, date1, date2) {
  sub_vec <- frame[[date_column]][frame[[date_column]] >= as.Date(date1) & frame[[date_column]] <= as.Date(date2)]
  df_new <- subset(frame, frame[[date_column]] %in% sub_vec)
  tot <- sum(df_new[[num_column]])
  return(tot)
}

只需使用此功能:

sum_by_dates <- function(frame, date_column, num_column, date1, date2) {
  sub_vec <- frame[[date_column]][frame[[date_column]] >= as.Date(date1) & frame[[date_column]] <= as.Date(date2)]
  df_new <- subset(frame, frame[[date_column]] %in% sub_vec)
  tot <- sum(df_new[[num_column]])
  return(tot)
}

R中的
if
-函数未矢量化,“&&”运算符也未矢量化。使用逻辑子集设置的常用方法是对矢量化运算符“&”进行设置,并将其放在“[”的第一个参数中:


sum(df[df$date>=as.date(“2000-01-01”)&df$dateR中的
if
-函数没有矢量化,&&&&-运算符也没有矢量化。使用逻辑子集的通常方法是对矢量化运算符“&”,并将其放在“[”的第一个参数中:


sum(df[df$date>=as.date(“2000-01-01”)&df$date…为了说明R的多样性,这里有一个使用
sqldf
的解决方案

date = seq(as.Date("2000-01-01"), as.Date("2000-01-31"), by="days")
nums = seq(1, 1, length.out = 31)
df = data.frame(date, nums)

startDate <- as.Date("2000-01-01")
endDate <- as.Date("2000-01-07")
library(sqldf)
fn$sqldf("select sum(nums) from df where date between $startDate and $endDate")

…为了说明R的多样性,这里有一个使用
sqldf
的解决方案

date = seq(as.Date("2000-01-01"), as.Date("2000-01-31"), by="days")
nums = seq(1, 1, length.out = 31)
df = data.frame(date, nums)

startDate <- as.Date("2000-01-01")
endDate <- as.Date("2000-01-07")
library(sqldf)
fn$sqldf("select sum(nums) from df where date between $startDate and $endDate")

使用单个
&
可以通过其他方式完成此操作使用单个
&
可以通过其他方式完成此操作,在这种情况下会给出相同的答案,因为“nums”列都是
1
,但我认为两者都不够笼统,也不是实际要求的内容,因为在这两种情况下,您都没有对
nums
进行求和。我做了,但我想我没有足够仔细地查找。我希望在不同的位置找到
nums
。这将给出相同的答案,因为“nums”列都是
1
,但我认为两者都不够笼统,也不是实际要求的内容,因为在这两种情况下,您都没有对
nums
进行求和。我做了,但我想我没有足够仔细地查找。我希望在不同的地方找到
nums
date = seq(as.Date("2000-01-01"), as.Date("2000-01-31"), by="days")
nums = seq(1, 1, length.out = 31)
df = data.frame(date, nums)

startDate <- as.Date("2000-01-01")
endDate <- as.Date("2000-01-07")
library(sqldf)
fn$sqldf("select sum(nums) from df where date between $startDate and $endDate")
> fn$sqldf("select sum(nums) from df where date between $startDate and $endDate")
   sum(nums)
1         7
>