r - 如何在两个分组变量中聚合数据(组中组)?
问题描述
我想以长格式聚合数据。我有一个 ID 变量、一个年份变量和另外两个有趣的变量。我现在想在一年内汇总一个人的变量。
这是我的原始数据框的样子:
ID year month x y
1 A 2014 3 2 NA
2 B 2010 2 3 NA
3 B 2010 5 NA 21
4 B 2011 2 2 NA
5 B 2011 5 NA 25
6 C 2012 5 NA 23
7 C 2013 2 2 NA
8 C 2013 5 NA 22
9 C 2014 2 1 NA
10 C 2014 11 NA 30
这就是我想要的方式:
ID year month x1 y1
1 A 2014 3 2 NA
2 B 2010 2 3 21
3 B 2010 5 3 21
4 B 2011 2 2 25
5 B 2011 5 2 25
6 C 2012 5 NA 23
7 C 2013 2 2 22
8 C 2013 5 2 22
9 C 2014 2 1 30
10 C 2014 11 1 30
每当一个人在一年内有两个测量值时(例如,B 人在 2010 年和 2011 年有两个测量值),我想在这个人和每年内汇总 x 和 y 值。后来我想要一个数据框,它每年只包含一行,但包含关于 x 和 y 的所有信息。
像这样:
ID year month x1 y1
1 A 2014 3 2 NA
2 B 2010 5 3 21
3 B 2011 2 2 25
6 C 2012 5 NA 23
7 C 2013 5 2 22
9 C 2014 2 1 30
你有什么建议如何做到这一点?非常感激您的帮忙!
解决方案
我们可以na.locf0
使用zoo
library(dplyr)
library(zoo)
df1 %>%
group_by(ID, year) %>%
mutate_at(vars(x, y), list(~ na.locf0(na.locf0(., fromLast = TRUE))))
# A tibble: 10 x 5
# Groups: ID, year [6]
# ID year month x y
# <chr> <int> <int> <int> <int>
# 1 A 2014 3 2 NA
# 2 B 2010 2 3 21
# 3 B 2010 5 3 21
# 4 B 2011 2 2 25
# 5 B 2011 5 2 25
# 6 C 2012 5 NA 23
# 7 C 2013 2 2 22
# 8 C 2013 5 2 22
# 9 C 2014 2 1 30
#10 C 2014 11 1 30
或使用fill
fromtidyr
library(tidyr)
df1 %>%
group_by(ID, year) %>%
fill(x, y, .direction = 'up') %>%
fill(x, y)
获得最终输出
df1 %>%
group_by(ID, year) %>%
fill(x, y, .direction = 'up') %>%
slice(1)
# A tibble: 6 x 5
# Groups: ID, year [6]
# ID year month x y
# <chr> <int> <int> <int> <int>
#1 A 2014 3 2 NA
#2 B 2010 2 3 21
#3 B 2011 2 2 25
#4 C 2012 5 NA 23
#5 C 2013 2 2 22
#6 C 2014 2 1 30
数据
df1 <- structure(list(ID = c("A", "B", "B", "B", "B", "C", "C", "C",
"C", "C"), year = c(2014L, 2010L, 2010L, 2011L, 2011L, 2012L,
2013L, 2013L, 2014L, 2014L), month = c(3L, 2L, 5L, 2L, 5L, 5L,
2L, 5L, 2L, 11L), x = c(2L, 3L, NA, 2L, NA, NA, 2L, NA, 1L, NA
), y = c(NA, NA, 21L, NA, 25L, 23L, NA, 22L, NA, 30L)),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))
推荐阅读
- python - “TypeError:列表索引必须是整数或切片,而不是元组” - 如何将列表项放入矩阵
- java - 使用 JOINED 继承策略并设置 spring.jpa.properties.hibernate.jdbc.batch_size 时实体部分保存
- highcharts - 如何在 highcharts 中实现这种类型的标记?
- javascript - 阵列没有看到新的更新
- pandas - 函数在同一数据帧上多次运行时出错
- javascript - Expo React Native App中的隐藏状态栏留下空白
- python-3.x - 使用 Sagemaker 生命周期配置文件安装多个包
- apigee - Apigee 在将请求转发到目标之前删除 URL 字符串
- linux - 部署地理服务器 WAR 后,Tomcat 未在浏览器上加载 - Ubuntu
- opc - 如何在 node-opcua 服务器中获取连接的客户端和客户端证书