2014-09-18 76 views
0

我有data.frame:錯誤dplyr總結

set.seed(1L) 
vector <- data.frame(patient=rep(1:5,each=2),medicine=rep(1:3,length.out=10),prob=runif(10)) 

我想要得到的「概率」列平均值,而由病人分組。我用下面的代碼這樣做:

vector %>% 
    group_by(patient) %>% 
    summarise(average=mean(prob)) 

此代碼完美的作品。但是,我需要得到相同的值,而不使用在「總結」行字「概率」。我想下面的代碼,但它給了我一個data.frame中,列「平均」是5個相同的價值觀,這是不是我想要一個向量:

vector %>% 
     group_by(patient) %>% 
     summarise(average=mean(vector[,3])) 

PD:爲便於理解爲什麼我需要這個,我有一個複雜的名稱需要進行「總結」,這就是爲什麼我不能在總結命令把一個一個多列另一個數據幀。我想要的是在那裏放置一個矢量來計算由病人分組的每列的probs。

+2

我可以提議首先將數據納入作進一步處理最方便的格式?你最後的評論暗示,首先熔化數據,然後將你提出既可以是一個有前途的方法的工作代碼。 – 2014-09-18 23:05:27

+0

我認爲這是[目前在作品(https://github.com/hadley/dplyr/issues/352),連接到[懶](https://github.com/hadley/lazyeval)封裝 – baptiste 2014-09-18 23:52:08

+0

謝謝彼得,這實際上解決了我的問題!我融化並「挖掘」了數據框。 – Victor 2014-09-20 15:12:02

回答

4

看樣子你想summarise_each

vector %>% 
    group_by(patient) %>% 
    summarise_each(funs(mean), vars= matches('prop')) 

使用data.table你可以做

setDT(vector)[,lapply(.SD,mean),by=patient,.SDcols='prob') 
+0

請糾正我,如果我錯了,但這種解決方案的問題是,假設所有列包括單詞「概率」,而這正是我想避免的。我要給與確切名稱的載體(例如載體[,3:50]),所以每列總結即使這些名稱是完全不同的。 – Victor 2014-09-20 00:08:20