2017-04-06 58 views
0

我想比較第一列出現的第一次到最後一次出現的次數。我試圖檢查col1中的重複值結束時col2有多少變化。因此,例如用樣本數據:提取值的開始發生到最後一次發生?

Date   col1  col2 
2016-12-20  1  5 <= first occurrence of 1  
2017-01-12  1  7 <= last occurrence of 1 (compare 7 > 5, passes: conclude 1) 
2017-01-13  -1  8 <= first occurrence of -1  
2017-01-16  -1  10   
2017-01-17  -1  11 <= last occurrence of -1 (compare 11 < 8, fails: conclude 0)  

如果col1是1,如果last occurrence > first occurrence,然後我要返回1.如果col1是-1,如果last occurrence < first occurrence的話,我想返回-1。

2016-12-20  1  5  0  
2017-01-12  1  7  1  
2017-01-13  -1  8  0  
2017-01-16  -1  10 0  
2017-01-17  -1  11 0 

我真的不知道如何提取上述情況下值的第一次和最後一次出現。幫助將非常感謝!

+1

什麼是該示例中的列名?哪一列是第一列?是日期還是下一個? – akrun

+0

對不起!我已經將上面的data.frame讀入一個'xts'文件。我的第一列是指下一個。爲清晰起見,我會標註它們 – Nikitau

+0

2016-12-20爲什麼選擇0?根據你的解釋,結果欄應該是1或-1。 –

回答

0

考慮df作爲輸入:

df = read.table(text='Date   col1  col2 
2016-12-20  1  5 
2017-01-12  1  7 
2017-01-13  -1  8 
2017-01-16  -1  10   
2017-01-17  -1  11 
      ', stringsAsFactors=FALSE, header=TRUE) 

你可以嘗試分組在col1,按日期排列,然後簡單地比較極端值col2

df %>% 
    group_by(col1) %>% 
    arrange(Date) %>% 
    filter(row_number()==1 | row_number()==n()) %>% 
    mutate(k = (col2 - lag(col2,1)) * col1) %>% 
    mutate(k = if_else((k/abs(k)) <0, 0, k)) %>% 
    select(col1, k) %>% 
    filter(!is.na(k)) 

這給:

Source: local data frame [2 x 2] 
Groups: col1 [2] 

    col1  k 
    <int> <dbl> 
1  1  1 
2 -1  0 

ps輸出k必須進行標準化以匹配您所需的格式。

0

隨着data.table

library(data.table) dt<-setDT(df) dt[,col4:=ifelse((seq_len(.N)==.N),ifelse((.SD[.N,2]*col1>.SD[1,2]*col1),1,0),0),by=(col1)]