【问题标题】:Error dplyr summarise错误 dplyr 总结
【发布时间】:2014-09-18 22:51:47
【问题描述】:

我有一个data.frame:

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:为了理解我为什么需要这个,我有另一个数据框,其中包含多个具有复杂名称的列,需要“汇总”,这就是为什么我不能一一放在汇总命令上的原因。我想要的是放一个向量来计算按患者分组的每一列的概率。

【问题讨论】:

  • 我可以建议先将数据转换成最方便的格式以便进一步处理吗?您的最后一条评论暗示,首先融合数据然后应用您已经提供的工作代码可能是一种有前途的方法。
  • 我认为是currently in the works,链接到lazy
  • 谢谢彼得,这实际上解决了我的问题!我融化并“转播”了数据框。

标签: r dplyr


【解决方案1】:

看来你想要summarise_each

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

使用 data.table 你可以做到

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

【讨论】:

  • 如果我错了,请纠正我,但这个解决方案的问题是假设所有列都包含单词“prob”,这是我试图避免的。我想给出一个具有确切名称的向量(例如vector[,3:50]),因此即使名称完全不同,也会汇总每一列。
猜你喜欢
  • 2017-12-22
  • 2021-04-01
  • 1970-01-01
  • 2017-09-14
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
相关资源
最近更新 更多