2014-09-18 62 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