使用dplyr汇总纵向数据
我有一个数据框,看起来像这样:使用dplyr汇总纵向数据,r,dplyr,R,Dplyr,我有一个数据框,看起来像这样: set.seed(100) library(dplyr) df <- tibble(ID = rep(1:4, each = 2), weight = rep(abs(rnorm(4, 5, 3)), each = 2), year = rep(2013:2014, 4), var1 = sample(1:5, 8, rep = TRUE),
set.seed(100)
library(dplyr)
df <- tibble(ID = rep(1:4, each = 2),
weight = rep(abs(rnorm(4, 5, 3)), each = 2),
year = rep(2013:2014, 4),
var1 = sample(1:5, 8, rep = TRUE),
var2 = sample(1:5, 8, rep = TRUE))
# A tibble: 8 x 5
ID weight year var1 var2
<int> <dbl> <int> <int> <int>
1 1 3.493423 2013 3 2
2 1 3.493423 2014 1 2
3 2 5.394593 2013 4 2
4 2 5.394593 2014 5 4
5 3 4.763249 2013 2 3
6 3 4.763249 2014 2 4
7 4 7.660354 2013 4 3
8 4 7.660354 2014 4 4
或者,假设我想看到2013年到2014年间var2
的差异,我希望得到以下数据帧:
# A tibble: 4 x 3
ID weight indicator
<int> <dbl> <lgl>
1 1 3.493423 FALSE
2 2 5.394593 FALSE
3 3 4.763249 TRUE
4 4 7.660354 TRUE
# A tibble: 4 x 3
ID weight diff_var2
<int> <dbl> <dbl>
1 1 3.493423 0
2 2 5.394593 2
3 3 4.763249 1
4 4 7.660354 1
#一个tible:4 x 3
ID重量差异值2
1 1 3.493423 0
2 2 5.394593 2
3 3 4.763249 1
4 4 7.660354 1
有人对如何进行这项工作有什么想法吗?我不知道这将如何推广到更多年的数据,但目前我只是在处理两年的纵向数据
最后,例如,我想知道
var1
没有变化的人群的加权比例,或者var2
中的加权平均移动量等。这些只是我正在研究的各种查询的一些示例。您已经大致列出了您需要做的事情,但如果要保存列,请同时按ID和权重分组
df %>% group_by(ID, weight) %>%
summarise(indicator = n_distinct(var1) < n(),
diff_var2 = diff(var2))
## Source: local data frame [4 x 4]
## Groups: ID [?]
##
## ID weight indicator diff_var2
## <int> <dbl> <lgl> <int>
## 1 1 3.493423 FALSE 0
## 2 2 5.394593 FALSE 2
## 3 3 4.763249 TRUE 1
## 4 4 7.660354 TRUE 1
df%>%分组依据(ID,重量)%>%
总结(指标=n_独立(var1)
如果您有两年以上的数据或缺少数据,您可能需要一种更稳健的方法。您已经大致规划好了需要做的事情,但是如果要保存列,请按ID和权重分组
df %>% group_by(ID, weight) %>%
summarise(indicator = n_distinct(var1) < n(),
diff_var2 = diff(var2))
## Source: local data frame [4 x 4]
## Groups: ID [?]
##
## ID weight indicator diff_var2
## <int> <dbl> <lgl> <int>
## 1 1 3.493423 FALSE 0
## 2 2 5.394593 FALSE 2
## 3 3 4.763249 TRUE 1
## 4 4 7.660354 TRUE 1
df%>%分组依据(ID,重量)%>%
总结(指标=n_独立(var1)
如果您有两年以上的数据或缺少数据,您可能需要更稳健的方法。我们可以使用
数据。表
library(data.table)
setDT(df)[, .(indicator=uniqueN(var1)==1, diff_var2= diff(var2)), ID]
# ID indicator diff_var2
#1: 1 FALSE 0
#2: 2 FALSE 2
#3: 3 TRUE 1
#4: 4 TRUE 1
我们可以使用data.table
library(data.table)
setDT(df)[, .(indicator=uniqueN(var1)==1, diff_var2= diff(var2)), ID]
# ID indicator diff_var2
#1: 1 FALSE 0
#2: 2 FALSE 2
#3: 3 TRUE 1
#4: 4 TRUE 1
太棒了,谢谢<代码>?summary
没有列出这些摘要函数,是否有有用的存储库?您可以使用任何返回长度为1的向量的函数,无论其来源如何,因此它不是一个有限的列表n
是dplyr的一个辅助函数,它给出了观察值的数量,就像一个尊重分组的nrow
n_distinct
是通用长度(唯一(…)
的dplyr快捷方式diff
来自实际的base
包。所有文件都记录在各自的文件包中。提供了一个简单的摘要。这是最好的:这是最好的:辉煌-谢谢<代码>?summary
没有列出这些摘要函数,是否有有用的存储库?您可以使用任何返回长度为1的向量的函数,无论其来源如何,因此它不是一个有限的列表n
是dplyr的一个辅助函数,它给出了观察值的数量,就像一个尊重分组的nrow
n_distinct
是通用长度(唯一(…)
的dplyr快捷方式diff
来自实际的base
包。所有文件都记录在各自的文件包中。提供了一个简单的摘要。这更好:这是最好的: