使用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
包。所有文件都记录在各自的文件包中。提供了一个简单的摘要。这更好:这是最好的: