【问题标题】:Summarise dataframe to include all unique values in a grouping汇总数据框以包含分组中的所有唯一值
【发布时间】:2016-04-11 02:24:39
【问题描述】:

我想总结一个数据框,以便一列包含特定组内的唯一值字符串。所以使用 iris 数据集:

iris %>%
  group_by(Species) %>%
  summarise(mPW=mean(Petal.Width))

这给出了按物种分组的 Petal.Width 的平均值。但是,如果我想将所有用于计算该平均值的值作为输出,该怎么办。我想要列表中的那些唯一值,尽管不是列表的 R 含义。我试过了,但显然这是错误的:

 iris %>%
   group_by(Species) %>%
   summarise(lPW=paste(Petal.Width, sep=","))

这是一个截断的所需示例数据帧输出。请注意,LPW 所需的输出是一个字符对象:

 Species lPW
 setosa  0.1,0.2,0.3,0.4,0.5,0.6
 ....

我没有设置dplyr 解决方案。这正是我平时工作的方式。

提前致谢。

【问题讨论】:

  • 你应该说你想要的结果是一个列表对象,它会像那样打印(可能使用特殊的打印方法),或者你只是想要一个字符对象作为结果。
  • 使用collapse 而不是sep

标签: r dataframe dplyr


【解决方案1】:
# dplyr_0.4.3
iris %>%
select(Species, Petal.Width) %>%
mutate(Petal.Width = as.character(Petal.Width)) %>%
unique() %>%
group_by(Species) %>%
summarize(lPW = paste(as.character(Petal.Width), collapse = ","))

【讨论】:

    【解决方案2】:

    将我的评论提升为答案:使用collapse 而不是sep

    iris %>%
      group_by(Species) %>%
      summarise(lPW = paste(Petal.Width, collapse=","))
    

    如果您想将其限制为唯一值,您可以使用:

    iris %>%
      group_by(Species) %>%
      summarize(lPW = paste(unique(Petal.Width), collapse = ","))
    

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      相关资源
      最近更新 更多