2016-05-31 106 views
2

我想計數的時間爲前5天的數value出現>20從通過柱(ncol = 1)的數目1中所定義的特定日期。例如,日期1997.05.25該值出現多少次>201997.05.21計數的天數和數據範圍

下面是變量:

value <- c(37,19.75,19.5,14.5,24.75,25,25.5,19.75,19.75,14.25,21.25,21.75,17.5,16.25,14.5, 
       14.5,14.75,9.5,11.75,15.25,14.25,16.5,13.5,18.25,13.5,11.25,10.75,12,8.5, 
       9.75,14.75) 
    Date <- c("1997-05-01","1997-05-02","1997-05-03","1997-05-04","1997-05-05", 
       "1997-05-06","1997-05-07","1997-05-08","1997-05-09","1997-05-10", 
       "1997-05-11","1997-05-12","1997-05-13","1997-05-14","1997-05-15", 
       "1997-05-16","1997-05-17","1997-05-18","1997-05-19","1997-05-20", 
       "1997-05-21","1997-05-22","1997-05-23","1997-05-24","1997-05-25", 
       "1997-05-26","1997-05-27","1997-05-28","1997-05-29","1997-05-30", 
       "1997-05-31") 
    ncol <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)` 

    data <- data.frame(value, Date, ncol) 

    library(data.table) 

    setDT(data)[, ncol := ifelse(Date %in% c("1997-05-05","1997-05-11","1997-05-14", 
              "1997-05-18","1997-05-25"), ncol+1, 0) ] 

怎麼做最好?幫助將不勝感激。

這是我期望的結果:

1. value Date ncol newcol 
2. 37.00 1997-05-05 1 2 
3. 19.75 1997-05-11 1 2 
4. 19.50 1997-05-14 1 2 
5. 14.50 1997-05-18 1 0 
6. 24.75 1997-05-25 1 0 
+0

這可能是件好事,因爲要添加預期的輸出,通過答案來判斷,它是模糊的 –

+0

感謝羅@docendo discimus。把我想得到的結果。 – Gustavo

回答

0

這裏是使用dplyr一個解決方案:

library(dplyr) 

data$Date <- as.Date(data$Date) 

data %>% 
    filter(between(Date, "1997-05-01", "1997-05-21"), 
      value > 20) %>% 
    nrow() 
1

如果我理解正確的話,你可以使用Reduceshift

library(data.table) 
DT <- data.table(value, Date) 

DT[, ncol := Reduce(`+`, shift(value > 20, 1:5, fill = 0))] 

這裏做的事情:它計算,對DT的每一行,多少時間前面5行中的value列大於20,並將其寫入列ncol


如果你想改變這個5行從過去5天的「窗口」,包括當天+之前的4行,則可以將代碼更改爲:

DT[, ncol := Reduce(`+`, shift(value > 20, 0:4, fill = 0))] 
+0

不錯!但我想這個問題想要總結前五天(不是行)中'value> 20'的情況數量。在我看來,這看起來像是通過移動間隔 –

+0

@RafaelPereira來總結一個'data.table'的問題,也許你是對的。我不確定,這就是爲什麼我要求OP在問題中提供他們想要的結果。 –

+0

太棒了!就是這樣。謝謝。我想包括當前的日子。但是,並非所有行都必需,只能是具有編號1(特定日期)的列的日子。一個問題,我如何只選擇想用date和newcol創建一個新表的行? – Gustavo