2017-09-08 81 views
-2

我有一組類似於此的數據,並希望在所有不同列的值匹配時獲取SORT_DT的最早日期。請幫我解決這個問題需要幫助從R的數據框中選擇最早的日期

df <- fread("CUST_NO ID_NO SYMBOL AUTO_CREATE_DT  CLASS_TYPE SORT_DT 
     107 10120  1 2014-05-12    G/L 2015-01-09 
     107 10120  1 2014-05-12    G/L 2015-11-10 
     107 10120  1 2014-05-12    G/L 2014-06-18 
     107 10120  1 2014-05-12    G/L 2014-05-13 
     107 10120  1 2014-05-12    G/L 2015-07-10 
     107 10120  1 2014-05-12    G/L 2015-10-09 
     107 10120  1 2014-05-12    G/L 2016-04-08 
     107 10120  1 2014-05-12    G/L 2016-01-08 
     107 10120  1 2014-05-12    G/L 2016-12-22 
     107 10120  1 2014-05-12    G/L 2017-01-13 
     107 10120  1 2014-05-12    G/L 2016-07-08 
     108 10120  1 2014-05-12    G/L 2017-04-14 
     108 10120  1 2014-05-12    G/L 2017-04-17 
     108 10120  1 2014-05-12    G/L 2016-08-31 
     108 10120  1 2014-05-12    G/L 2015-04-10 
     108 10120  1 2014-05-12    G/L 2016-12-22") 

輸出應該如下

CUST_NO ID_NO  SYMBOL AUTO_CREATE_DT  CLASS_TYPE SORT_DT 
1   107  10120  1 2014-05-12    G/L  2014-05-13 
2   108  10120  1 2014-05-12    G/L  2015-04-10 
+0

考慮審議以下SO回答:https://開頭計算器的.com /問題/ 33436647 /組由和選擇分鐘-日期與數據表。你的語法如下:'setDT(df)[,.SD [which.min(as.Date(SORT_DT))],by = CUST_NO]' – ccapizzano

+0

@ccapizzano謝謝你的迴應。由於安全問題,我的數據集很大並且只放了一部分數據,請讓我知道如果CUST_NO ID_NO SYMBOL AUTO_CREATE_DT CLASS_TYPE的所有行匹配,然後從SORT_DT中選擇最早日期,我該如何解決此問題 –

回答

0

試試這個:

df2 <- aggregate(df, list(df$CUST_NO, df$ID_NO, df$SYMBOL, df$AUTO_CREATE_DT, df$CLASS_TYPE), FUN = min) 
    df2 <- df2[c("CUST_NO", "ID_NO", "SYMBOL", "AUTO_CREATE_DT", "CLASS_TYPE", "SORT_DT")] 
0
aggregate(SORT_DT ~ ., data = df, min) 

# CUST_NO ID_NO SYMBOL AUTO_CREATE_DT CLASS_TYPE SORT_DT 
# 1  107 10120  1  2014-05-12  G/L 2014-05-13 
# 2  108 10120  1  2014-05-12  G/L 2015-04-10