2015-10-23 81 views
0

時保持所有列我有一個ddplay功能看起來像這樣使用ddply

myF <- ddply(.data = someDf, 
        .variables = ~X, 
        .fun = function(piece) { 
         as.Date(piece$myDate, "%d.%m.%Y") %>% which.min 
}) 

我需要返回我的整個數據幀,而不只是用變量XYmyDate一個數據幀。我怎麼能告訴ddply,它應該按照函數的說法對我的數據進行排序,但是返回我的初始df的每一列?

我DF,我跑長相操作類似

X Y c d myDate  
a1 12 bb c 05.05.12 
a1 14 cd a 04.05.12 
b1 12 ff r 10.12.15 
c1 15 ss g 09.09.10 
b1 12 aa p 01.02.12 

的ddply它應該看起來像這樣

X Y c d myDate  
a1 14 cd a 04.05.12 
c1 15 ss g 09.09.10 
b1 12 aa p 01.02.12 

回答

0

對@bramtayl的回答也類似,但還使用了過濾器。

> library(dplyr) 

> new_df <- x %>% 
+ group_by(X) %>% 
+ mutate(myDate = as.Date(myDate, format = '%d.%m.%y')) %>% 
+ filter(myDate == min(myDate)) 

> new_df 
Source: local data frame [3 x 5] 
Groups: X [3] 

     X  Y  c  d  myDate 
    (fctr) (fctr) (fctr) (fctr)  (date) 
1  a1  14  cd  a 2012-05-04 
2  c1  15  ss  g 2010-09-09 
3  b1  12  aa  p 2012-02-01 

> unique(x$X) %>% length == nrow(new_df) 
[1] TRUE 

> unique(x$X) %>% length == length(new_df) 
[1] FALSE 
+0

這似乎工作。但是,當我運行'unique(x $ X)%>%length'時,結果的長度與代碼返回的'df'的長度不同。那不應該。 – Stophface

+0

我相信你在這裏錯誤地使用'length'。如果你正在使用'length(new_df)',你將返回數據框中的列數......這是錯誤的。你想'nrow(new_df)'。這應該是相同的,並且您提供的數據也是一樣的。 – maloneypatr

+0

'unique'不給我一個'df'回來,而是一個向量!所以'長度'應該沒問題。 – Stophface

0

的一種方式後去瞭解它,假設你的輸出是與您輸入的長度相同

myF <- cbind(myF, 
        ddply(.data = someDf, 
        .variables = ~X+Y, 
        .fun = function(piece) { 
         as.Date(piece$myDate, "%d.%m.%Y") %>% which.min 
}) 
) 

這會將新信息附加到數據框末尾的列中。

+0

我輸出的長度不一樣。這就是'ddply'的意思了嗎? :) – Stophface

+0

這取決於:)你可以'dput()'你的數據,所以我們可以看到你在用什麼? – Badger

+0

我添加了我的數據幀 – Stophface

0

你在找這樣的嗎?

library(dplyr) 

df %>% 
    group_by(X) %>% 
    slice(myDate %>% 
      as.Date("%d.%m.%Y") %>% 
      which.min %>% 
      last) 
+0

的示意圖。當我運行'unique(x $ X)%>%length'時,結果的長度與代碼返回的df的長度不同。那不應該是 – Stophface

+0

請參閱上面的編輯版本。它適用於您的數據。 – bramtayl

+0

這導致我的程序崩潰... – Stophface