2016-12-05 56 views
-1

請考慮下表。用前後值替換NAs,在R中分組替換

MC StartDate EndDate LWID KMT DAFR FTR FSR 
HP300805 08Nov2016 0:00:00.000 08Nov2016 0:00:00.000 25Sep2006 0:00:00.000 2403468.00000 872.90000 31.0000 9.5000 
HP300805 NA 08Nov2016 0:00:00.000 25Sep2006 0:00:00.000 2403468.00000 872.90000 31.0000 9.5000 
HP301630 10Nov2016 0:00:00.000 10Nov2016 0:00:00.000 NA 1356668.00000 944.70000 29.0000 8.5000 
HP301630 10Nov2016 0:00:00.000 10Nov2016 0:00:00.000 13Jun2005 0:00:00.000 NA 944.70000 NA 8.5000 
HP303562 09Nov2016 0:00:00.000 09Nov2016 0:00:00.000 07Jul2010 0:00:00.000 2403820.00000 942.60000 32.0000 10.0000 
HP303562 09Nov2016 0:00:00.000 NA 07Jul2010 0:00:00.000 2403820.00000 NA 32.0000 NA 
HP970489 09Nov2016 0:00:00.000 09Nov2016 0:00:00.000 05Sep2014 0:00:00.000 2428800.00000 887.40000 30.8000 NA 
HP970489 09Nov2016 0:00:00.000 09Nov2016 0:00:00.000 05Sep2014 0:00:00.000 2428800.00000 887.40000 30.8000 10.0000 
JPRK2894 01Nov2016 0:00:00.000 01Nov2016 0:00:00.000 29Sep2011 0:00:00.000 202392.00000 900.70000 30.6000 10.5000 
JPRK2894 01Nov2016 0:00:00.000 NA 29Sep2011 0:00:00.000 NA 900.70000 NA 10.5000 
PRK10859 01Nov2016 0:00:00.000 01Nov2016 0:00:00.000 21Nov2014 0:00:00.000 3282376.00000 1229.30000 27.0000 8.0000 
PRK10859 01Nov2016 0:00:00.000 01Nov2016 0:00:00.000 21Nov2014 0:00:00.000 NA NA 27.0000 NA 
PRK11982 08Nov2016 0:00:00.000 08Nov2016 0:00:00.000 03Jul2015 0:00:00.000 2010563.00000 1241.50000 28.0000 8.0000 
PRK11982 NA 08Nov2016 0:00:00.000 NA 2010563.00000 NA 28.0000 NA 
PRK12016 03Nov2016 0:00:00.000 03Nov2016 0:00:00.000 03Dec2014 0:00:00.000 3139159.00000 1188.50000 27.0000 9.0000 
PRK12016 NA NA NA NA 1188.50000 NA 9.0000 
PRK1290 03Nov2016 0:00:00.000 03Nov2016 0:00:00.000 09May2012 0:00:00.000 6201765.00000 926.90000 26.0000 8.5000 
PRK13702 07Nov2016 0:00:00.000 07Nov2016 0:00:00.000 26Oct2016 0:00:00.000 2989858.00000 1250.00000 32.0000 11.0000 
PRK14187 08Nov2016 0:00:00.000 08Nov2016 0:00:00.000 13Aug2015 0:00:00.000 2057595.00000 1172.50000 27.0000 8.0000 
PRK14294 03Nov2016 0:00:00.000 03Nov2016 0:00:00.000 06Oct2015 0:00:00.000 NA 1241.60000 28.0000 7.5000 
PRK2191 07Nov2016 0:00:00.000 07Nov2016 0:00:00.000 15Feb2010 0:00:00.000 471741.00000 998.00000 32.0000 10.5000 
PRK2460 10Nov2016 0:00:00.000 10Nov2016 0:00:00.000 25Sep2015 0:00:00.000 2865224.40000 1235.10000 28.0000 8.0000 
PRK3510 02Nov2016 0:00:00.000 02Nov2016 0:00:00.000 21Oct2014 0:00:00.000 575628.00000 1236.60000 26.5000 9.5000 
PRK3522 08Nov2016 0:00:00.000 08Nov2016 0:00:00.000 30Sep2014 0:00:00.000 2694729.00000 1196.50000 27.0000 8.0000 
PRK3579 05Nov2016 0:00:00.000 05Nov2016 0:00:00.000 02Sep2015 0:00:00.000 2951465.00000 1219.20000 28.0000 7.5000 
PRK3893 09Nov2016 0:00:00.000 09Nov2016 0:00:00.000 08Aug2014 0:00:00.000 2910361.00000 1173.48000 28.5400 9.6200 
PRK3893 09Nov2016 0:00:00.000 09Nov2016 0:00:00.000 08Aug2014 0:00:00.000 2910361.00000 NA 28.5400 9.6200 
PRK5 03Nov2016 0:00:00.000 03Nov2016 0:00:00.000 07Oct2015 0:00:00.000 NA 1245.50000 27.0000 9.0000 

我想替換由任一即時先前值或後立即值「NA」值的每個組「MC」,使得最後的表應該像如下:

MC StartDate EndDate LWID KMT DAFR FTR FSR 
HP300805 08Nov2016 0:00:00.000 08Nov2016 0:00:00.000 25Sep2006 0:00:00.000 2403468.00000 872.90000 31.0000 9.5000 
HP300805 08Nov2016 0:00:00.000 08Nov2016 0:00:00.000 25Sep2006 0:00:00.000 2403468.00000 872.90000 31.0000 9.5000 
HP301630 10Nov2016 0:00:00.000 10Nov2016 0:00:00.000 13Jun2005 0:00:00.000 1356668.00000 944.70000 29.0000 8.5000 
HP301630 10Nov2016 0:00:00.000 10Nov2016 0:00:00.000 13Jun2005 0:00:00.000 1356668.00000 944.70000 29.0000 8.5000 
HP303562 09Nov2016 0:00:00.000 09Nov2016 0:00:00.000 07Jul2010 0:00:00.000 2403820.00000 942.60000 32.0000 10.0000 
HP303562 09Nov2016 0:00:00.000 09Nov2016 0:00:00.000 07Jul2010 0:00:00.000 2403820.00000 942.60000 32.0000 10.0000 
HP970489 09Nov2016 0:00:00.000 09Nov2016 0:00:00.000 05Sep2014 0:00:00.000 2428800.00000 887.40000 30.8000 10.0000 
HP970489 09Nov2016 0:00:00.000 09Nov2016 0:00:00.000 05Sep2014 0:00:00.000 2428800.00000 887.40000 30.8000 10.0000 
JPRK2894 01Nov2016 0:00:00.000 01Nov2016 0:00:00.000 29Sep2011 0:00:00.000 202392.00000 900.70000 30.6000 10.5000 
JPRK2894 01Nov2016 0:00:00.000 01Nov2016 0:00:00.000 29Sep2011 0:00:00.000 202392.00000 900.70000 30.6000 10.5000 
PRK10859 01Nov2016 0:00:00.000 01Nov2016 0:00:00.000 21Nov2014 0:00:00.000 3282376.00000 1229.30000 27.0000 8.0000 
PRK10859 01Nov2016 0:00:00.000 01Nov2016 0:00:00.000 21Nov2014 0:00:00.000 3282376.00000 1229.30000 27.0000 8.0000 
PRK11982 08Nov2016 0:00:00.000 08Nov2016 0:00:00.000 03Jul2015 0:00:00.000 2010563.00000 1241.50000 28.0000 8.0000 
PRK11982 08Nov2016 0:00:00.000 08Nov2016 0:00:00.000 03Jul2015 0:00:00.000 2010563.00000 1241.50000 28.0000 8.0000 
PRK12016 03Nov2016 0:00:00.000 03Nov2016 0:00:00.000 03Dec2014 0:00:00.000 3139159.00000 1188.50000 27.0000 9.0000 
PRK12016 03Nov2016 0:00:00.000 03Nov2016 0:00:00.000 03Dec2014 0:00:00.000 3139159.00000 1188.50000 27.0000 9.0000 
PRK1290 03Nov2016 0:00:00.000 03Nov2016 0:00:00.000 09May2012 0:00:00.000 6201765.00000 926.90000 26.0000 8.5000 
PRK13702 07Nov2016 0:00:00.000 07Nov2016 0:00:00.000 26Oct2016 0:00:00.000 2989858.00000 1250.00000 32.0000 11.0000 
PRK14187 08Nov2016 0:00:00.000 08Nov2016 0:00:00.000 13Aug2015 0:00:00.000 2057595.00000 1172.50000 27.0000 8.0000 
PRK14294 03Nov2016 0:00:00.000 03Nov2016 0:00:00.000 06Oct2015 0:00:00.000 0 1241.60000 28.0000 7.5000 
PRK2191 07Nov2016 0:00:00.000 07Nov2016 0:00:00.000 15Feb2010 0:00:00.000 471741.00000 998.00000 32.0000 10.5000 
PRK2460 10Nov2016 0:00:00.000 10Nov2016 0:00:00.000 25Sep2015 0:00:00.000 2865224.40000 1235.10000 28.0000 8.0000 
PRK3510 02Nov2016 0:00:00.000 02Nov2016 0:00:00.000 21Oct2014 0:00:00.000 575628.00000 1236.60000 26.5000 9.5000 
PRK3522 08Nov2016 0:00:00.000 08Nov2016 0:00:00.000 30Sep2014 0:00:00.000 2694729.00000 1196.50000 27.0000 8.0000 
PRK3579 05Nov2016 0:00:00.000 05Nov2016 0:00:00.000 02Sep2015 0:00:00.000 2951465.00000 1219.20000 28.0000 7.5000 
PRK3893 09Nov2016 0:00:00.000 09Nov2016 0:00:00.000 08Aug2014 0:00:00.000 2910361.00000 1173.48000 28.5400 9.6200 
PRK3893 09Nov2016 0:00:00.000 09Nov2016 0:00:00.000 08Aug2014 0:00:00.000 2910361.00000 1173.48000 28.5400 9.6200 
PRK5 03Nov2016 0:00:00.000 03Nov2016 0:00:00.000 07Oct2015 0:00:00.000 0 1245.50000 27.0000 9.0000 

請注意,這裏曾經有單排,是指事先沒有或張貼觀測資料,將其替換來港0

我也想計算DAFR的LAG值。

我想在R中做,但不知道如何。有人可以幫忙嗎?

什麼我做的是這樣的:

# Is there NAs, if yes, replace them with 0 
which(is.na(DATA$DAFR)) 
DATA$DAFR[is.na(DATA$DAFR)] <- 0 

which(is.na(DATA$FTR)) 
DATA$FTR[is.na(DATA$FTR)] <- 0 

which(is.na(DATA$FSR)) 
DATA$FSR[is.na(DATA$FSR)] <- 0 

和滯後我能夠用這個至少在國民黨

library(tidyr) 
library(dplyr) 
DATA1 <- 
    DATA %>% 
    arrange(MC, StartDate) %>% 
    group_by(MC) %>% 
    replace_na(KMT = ifelse(is.na(lag(KMT))==T, (ifelse(is.na(lead(KMT))==T, 0, lead(KMT))), lag(KMT))) 

我不知道,但我沒有得到結果還有很多新加坡地區。

回答

0

你想要的是tidyr中的fill函數。 https://blog.rstudio.org/2015/09/13/tidyr-0-3-0/

因此,像:

DATA %>% 
    arrange(MC, StartDate) %>% 
    fill(KMT) 
+0

校正'replace_na(KMT = ifelse(is.na(滯後(KMT))== T,(ifelse(is.na(鉛(KMT))== T,0,lead(國民黨))),滯後(國民黨))) '但它說'replace_na'功能找不到。而它在您提供鏈接的文檔頁面上。 – ZeekDSA

+0

Hello Zeek。正確的評論方式不是嘗試修改我的答案......但如果您有話要說,請添加評論。此外,請嘗試我的答案。輸入'library(tidyr)',然後我寫下完整的內容,不需要'replace_na'或任何東西。 –

+0

同意。我會遵循:) – ZeekDSA