2017-04-18 36 views
1

我有一個數據集data.frame(x=rnorm(100),group=c(rep('a',40),rep('b',60))),我想用dplyr分析每個組。例如,我想使用fft。我怎樣才能在每個返回一個序列的組上運行一個函數,而不僅僅是值。如果這只是我可以總結的一個價值,那在這裏不起作用。我期望像data.frame(y=c(21,62,83,4,35,46,17,28), group=c(rep('a',5),rep('b',3)))這樣的輸出。如果可能的話,我想用dplyr來做,因爲我認爲它提高了可讀性。如何爲每個組返回矢量,而不是單個值的運行功能?

回答

3

我們可以summarise創建list輸出後unnest做。這將更容易與

library(tidyverse) 
df1 %>% 
    group_by(group) %>% 
    summarise(value = list(fft(x))) %>% 
    unnest() 
+1

啊,獎金第四選項。對於一維輸出數據(比如FFT),我可能更喜歡這個。 –

4

基本上有三個選項:

  1. 如果你想創建每組一個彙總值,使用summarize
  2. 如果要變換每個組的每個值,請使用mutate
  3. 如果要爲每個組創建一個新表,請使用do

如果我正確地理解了你,最後一個選項似乎最適合你的目的。 do一般是這些選項中功能最強大的,也是最難使用的。一般語法是:

data %>% 
    group_by(grouping_cols) %>% 
    do(data_frame(col1 = some_transformation(.$x))) 

例如:

iris %>% 
    group_by(Species) %>% 
    do(broom::tidy(lm(Sepal.Length ~ Sepal.Width, data = .))) 
+0

謝謝。我收集的那麼多。你能舉一個例子怎麼用嗎? – Make42

+0

@ Make42查看更新。 –

+0

謝謝!現在非常有幫助。對不起,我只能檢查一個答案。 – Make42

相關問題