2017-09-08 46 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