所以,这个问题的问题是,我无法发布实际的代码,因为我必须签署一份协议,而且我是 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)
| 归档时间: |
|
| 查看次数: |
13531 次 |
| 最近记录: |