r - 基于条件的动态总和
问题描述
df <-data.frame(
part = c('A','B','c'),
start_date = c('2018-12-01','2018-12-06','2018-12-08'),
end_date = c('2018-12-05','2018-12-07','2018-12-11'),
X2018.12.01 = c(2,3,4),
X2018.12.02 = c(5,6,0),
X2018.12.03 = c(0,3,0),
X2018.12.04 = c(5,9,1),
X2018.12.05 = c(1,2,3),
X2018.12.06 = c(2,3,4),
X2018.12.07 = c(1,1,1),
X2018.12.08 = c(6,6,6),
X2018.12.09 = c(8,7,6),
X2018.12.10 = c(0,1,1),
X2018.12.11 = c(1,2,3))
df1 <- setNames(df, c("part","start_date","end_date","2018-12-01",
"2018-12-02","2018-12-03","2018-12-04","2018-12-05","2018-12-06","2018-
12-07","2018-12-08","2018-12-09","2018-12-10","2018-12-11"))
现在我想在 df1 中创建一个列,它将根据其 start_date 和 end_date 对各个部分进行求和
- A 部分:应该从 2018-12-01 到 2018-12-05 的总和,即 2,5,0,5,1 的总和,即 13,
- B 部分,应从 2018-12-06 到 2018-12-07 总和,即 3+1=4
- c 部分,应从 2018-12-08 到 2018-12-11 总和,即 6+6+1+3= 16
我希望我能解释我的问题。
解决方案
这是一个基本的 R 方法,
sapply(split(df1, seq(nrow(df1))), function(i)
rowSums(i[names(i) %in% as.character(seq.Date(as.Date(i$start_date[1]),
i$end_date[1],
by = 'days'))]))
#1.1 2.2 3.3
#13 4 16
推荐阅读
- html - 如何向 com HTML 对象 powershell 添加新行
- java - AuthenticationSuccessEvent 后的 AccessDeniedException
- c# - 等待一段代码被阅读,然后再阅读下一段
- javascript - “mousedown”默认为右键单击和中键单击
- python - 在过滤后的数据框中搜索特定字符串,然后根据结果创建一个新列(Python/Pandas)
- http - 如何从 PowerApps 向特定 URI 发送发布请求?
- python - 在 Python 中对一系列值进行排序
- r - 通过带有降价的循环产生的图形交替
- java - Spring Boot REST API:无法将 String 类型的值转换为 Long
- asp.net - 类型违反了继承安全规则:“System.Web.Mvc.WebViewPage”。派生类型必须与基类型的安全可访问性匹配