R 使用“按日期求和”;如果;陈述
我试图使用“if”语句在数据帧中的两个日期之间求和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
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
>