r - 如何在 R 中的 dplyr 包中保留分组变量的真实值
问题描述
我的数据是这样的:
group <- c(21, 21, 21, 9, 9, 9, 25, 25, 25)
a <- c(8,3,5,6,8,3,3,9,3)
b <- c(4,9,0,1,3,5,6,1,1)
c <- c(1,7,2,5,6,8,4,8,6)
value <- c(23,34,43,52,65,21,12,89,76)
df <- data.frame(group,a,b,c,value)
我对其应用了以下功能。
out <- df %>%
select(group, a, b, value) %>%
group_by(group = gl(n()/3, 3)) %>%
summarise(res = mean(value), a=a[1], b=b[1])
print(out)
然后我得到以下结果。
group res a b
<fct> <dbl> <dbl> <dbl>
1 1 33.3 8 4
2 2 46 6 1
3 3 59 3 6
>
我的问题是如何像这样在输出 df 中保持 ID 的原始值
group res a b
<fct> <dbl> <dbl> <dbl>
1 21 33.3 8 4
2 9 46 6 1
3 25 59 3 6
>
提前致谢!
解决方案
问题是您group
在调用中覆盖了您的变量,group_by
因此您没有获得原始变量。您需要使用其他名称,group_by
然后进行计算。
我们可以使用两个选项 -
1) 有summarise
library(dplyr)
df %>%
group_by(group1 = gl(n()/3, 3)) %>%
summarise(res = mean(value), a=a[1], b=b[1], group = group[1])
# group1 res a b group
# <fct> <dbl> <dbl> <dbl> <dbl>
#1 1 33.3 8 4 21
#2 2 46 6 1 9
#3 3 59 3 6 25
2) 有mutate
df %>%
select(group, a, b, value) %>%
group_by(group1 = gl(n()/3, 3)) %>%
mutate(res = mean(value), a=a[1], b=b[1]) %>%
slice(1)
在这两种情况下,如果您不再对保留分组变量感兴趣,请ungroup() %>% select(-group1)
删除它。
推荐阅读
- asp.net - 微软翻译 API v3, ASP.NET VB.NET
- python - 使用新生成的令牌进行 API 调用时遇到问题。PARTNER_AUTHENTICATION_FAILED?
- terraform - 如何在 terraform 中定义“假设角色策略”?
- google-chrome-extension - 如何仅向特定登录用户授予对 Chrome 扩展程序内容的访问权限?
- c# - 尝试构建核心 2.2 User Helper
- python - 如何从该 URL 获取氨基酸序列?
- c++ - C++ 文件句柄
- java - 检查java流是否已被消费
- node.js - 如何解决“找不到模块'request-context'的声明文件。”?
- android - 如何从离子电容器/ vuejs项目打印