添加具有相同日期的值

时间:2017-08-07 11:39:22

标签: r for-loop if-statement while-loop

我有一个名为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])
  }
}

2 个答案:

答案 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