我有一个名为pnc_1
它有date
列,有几个重复日期,wid
列有数字值。我正在尝试为每个相同的wid
添加所有date
值,然后将结果放入向量中。
这个循环冻结了R-Studio。
cumsum <- 0
for (i in 1:(nrow(pnc_1)-1)) {
while (pnc_1$date[i] == pnc_1$date[i+1]) {
cumsum <- (pnc_1$wid[i] + pnc_1$wid[i+1])
}
}
答案 0 :(得分:2)
library(dplyr)
# Creating a dataset
dates <- c(Sys.time() - (3600*24), Sys.time() - 2*(3600*24), Sys.time())
dates <- as.Date(dates)
dates <- rep(dates, each = 3)
wid <- c(1:9)
pnc_1 <- data.frame(date = dates, wid = wid)
# Using pipe operator and summarise to sum data by the grouping variable 'date'
sums <- pnc_1 %>%
group_by(date) %>%
summarise(wid.sum = sum(wid))
vector.of.sums <- c(sums$wid.sum)
答案 1 :(得分:1)
您可以使用聚合来有效地执行任务。你不需要经历for循环的所有麻烦。
sum_wid = aggregate(wid ~ date, pnc_1, sum)$wid
或者你也可以使用data.table包来完成它。
library("data.table")
pnc_1_dt = data.table(pnc_1)
sum_wid = pnc_1_dt[, sum(wid), by = dates]$V1