【问题标题】:How do I add summary-statistics values to each row of a data frame? [duplicate]如何将汇总统计值添加到数据框的每一行? [复制]
【发布时间】:2019-04-12 22:14:37
【问题描述】:

我想知道一种将汇总统计信息添加回数据框每一行的 tidyverse 方法。

下面的代码有效,但应该是一个更快的方法,对吧?

library("tidyverse")
data <- (iris)

means <- iris %>%
  group_by(Species) %>%
  summarise(
    Sepal.Length = mean(Sepal.Length),
    Sepal.Width = mean(Sepal.Width)
  )

data <- merge(data, means, by = "Species")

【问题讨论】:

  • 只需使用mutate 而不是summarize 即可一步获得完全相同的结果。 Summarize 删除所有其他列,每组仅保留 1 个汇总值,mutate 计算相同的值,然后将它们添加为新列
  • @camille:不,它不是重复的。该问题只需要一个包含 4 个(汇总)行的数据框:3 个组统计数据和 1 个总统计数据。此问题希望将这些统计信息列加入原始数据帧的每一行。
  • @smci 知道了,所以骗子 divibisan 发布了?
  • @divibisan:不,这个问题又不同了:这是关于将每组统计数据(收入总和)加入原始数据帧,然后在汇总统计数据上计算汇总统计数据 (每个 daily_revenue 小计占总收入的百分比)。每个人都容易上当受骗的扳机指!

标签: r dplyr summary


【解决方案1】:

一种方法是使用 mutate。

library("tidyverse")
data <- (iris)

data<-data %>% 
  group_by(Species) %>% 
  mutate(Sepal.Length.y=mean(Sepal.Length), Sepal.Width.y=mean(Sepal.Width)) 



所以这与您之前的非常相似,但减少了一些步骤。如果要重新排列列的顺序,可以重新排序。另外,我建议在您的帖子中从 Sepal.Length 和 Sepal.Width 更改列名,但如果您不指定唯一名称 r 只会在它们上放一个 .y 以使其唯一。 希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以使用dplyr::mutate_at

    iris %>% group_by(Species) %>% 
      mutate_at(.vars = vars(Sepal.Length,Sepal.Width), 
        .funs = list(mean = ~mean))
    

    我们需要list(mean = ~mean) 位,而不仅仅是.funs = mean 来重命名列,而不是覆盖原来的列。

    # A tibble: 150 x 7
    # Groups:   Species [3]
       Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Length_mean Sepal.Width_mean
              <dbl>       <dbl>        <dbl>       <dbl> <fct>               <dbl>            <dbl>
     1          5.1         3.5          1.4         0.2 setosa               5.01             3.43
     2          4.9         3            1.4         0.2 setosa               5.01             3.43
     3          4.7         3.2          1.3         0.2 setosa               5.01             3.43
     4          4.6         3.1          1.5         0.2 setosa               5.01             3.43
     5          5           3.6          1.4         0.2 setosa               5.01             3.43
     6          5.4         3.9          1.7         0.4 setosa               5.01             3.43
     7          4.6         3.4          1.4         0.3 setosa               5.01             3.43
     8          5           3.4          1.5         0.2 setosa               5.01             3.43
     9          4.4         2.9          1.4         0.2 setosa               5.01             3.43
    10          4.9         3.1          1.5         0.1 setosa               5.01             3.43
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-03
      • 2019-08-18
      • 2015-07-31
      • 1970-01-01
      • 2020-10-19
      • 2018-06-09
      • 2018-05-21
      • 1970-01-01
      相关资源
      最近更新 更多