分组/汇总时如何保留列?

Sil*_*law 5 r dplyr

所以,这个问题的问题是,我无法发布实际的代码,因为我必须签署一份协议,而且我是 R 的新手,可能无法很好地解释这一点,但也许有人可以帮助我......

假设我有一些数据:

A   B    C   D
F1  6.6  10  10
F1  3.1  10  10
A1  1.0  20  10
B1  3.4  20  20
Run Code Online (Sandbox Code Playgroud)

因此,对于每个 A,C 和 D 值都是相同的。但我想使用 dplyr 来查找 Bmean,如下所示:

A    Bmean   C    D
F1   4,85    10  10
A1   1.0     20  10
B1   3.4     20  20
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?我的想法是使用类似的东西

dplyr::group_by(A) %>% dplyr::summarize(Bmean = mean(B))
Run Code Online (Sandbox Code Playgroud)

但这次操作后C和D似乎消失了。对我想保留的所有列进行 group_by 有意义吗?或者说这会如何运作?

只是为了澄清一下,我想使用 dplyr 语法,因为如果可能的话,它是更大操作的一部分。

小智 6

我想添加一个 awnser 来专门解决使用 dplyr 的问题。虽然我确信,有更优雅的方法可以做到这一点,但以下建议可以在汇总/聚合数据框中保留具有附加描述性变量的列。此外,如果不是这种情况,代码将无法保护您免受更大数据帧中的错误的影响。

library(dplyr)
library(tibble)

df <- tribble(
  ~A  , ~B , ~c , ~D ,
  "F1", 6.6, 10 , 10 ,
  "F1", 3.1, 10 , 10 ,
  "A1", 1.0, 20 , 10 ,
  "B1", 3.4, 20 , 20
)
Run Code Online (Sandbox Code Playgroud)

以下代码删除 C 列和 D 列

df %>%
  group_by(A) %>%
  summarise(Bmean = mean(B)) 
Run Code Online (Sandbox Code Playgroud)

此代码保留 C 列和 D 列。请注意,只有当组的每一行中都有相同的变量时,这才有效。但由于变量应该被保留并且不会对分组行为产生影响,所以无论如何应该如此。

df %>%
  group_by(A) %>%
  summarise(Bmean = mean(B),
            C = unique(C),
            D = unique(D))
Run Code Online (Sandbox Code Playgroud)

更新:

事实上,如果分组级别不“小于”分组变量,您还可以将组包含在 group_by 表达式中

Group1:
  A ,  B ,  C ,  D
"F1", 6.6, 10 , 10 
"F1", 3.1, 10 , 10 
Group2:
"A1", 1.0, 20 , 10 
Group3:
"B1", 3.4, 20 , 20
Run Code Online (Sandbox Code Playgroud)

请注意,C 列和 D 列在每组内保持相同的值。这意味着它们可以安全地在分组表达式中使用,从而被保留。

所以在你的情况下这也可以工作:

group_by(A,C,D)
Run Code Online (Sandbox Code Playgroud)


use*_*721 4

您可以使用以下方法执行此操作base R

aggregate(data=df1,B~.,FUN = mean)
Run Code Online (Sandbox Code Playgroud)