2017-08-07 36 views
-1

我有一個名爲pnc_1添加值與同日

它具有date列幾個重複日期的數據集,並與數值的wid列。我試圖將每個相同的date的所有wid值相加,然後將結果放入一個向量中。
此循環凍結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

嘗試'tapply(V1,datevec,FUN =總和)'或如果我們需要與相同的長度原始矢量的矢量,然後'AVE(V1,datevec,FUN =總和)' – akrun

+0

等待。代碼中的v1是什麼? –

+0

它可能是最初的矢量 – akrun

回答

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

您可以使用集合來有效地執行你的任務。你不需要經歷循環的所有麻煩。

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