相关疑难解决方法(0)

与group_by()一起使用时,dplyr:lead()和lag()错误

我想在每个组中找到lead()和lag()元素,但是有一些错误的结果.

例如,数据是这样的:

library(dplyr)
df = data.frame(name=rep(c('Al','Jen'),3),
                score=rep(c(100, 80, 60),2))
df
Run Code Online (Sandbox Code Playgroud)

数据:

  name score
1   Al   100
2  Jen    80
3   Al    60
4  Jen   100
5   Al    80
6  Jen    60
Run Code Online (Sandbox Code Playgroud)

现在我试着找出每个人的lead()和lag()得分.如果我使用arrange()对其进行排序,我可以得到正确的答案:

df %>%
  arrange(name) %>%
  group_by(name) %>%
  mutate(next.score = lead(score),
         before.score = lag(score) )
Run Code Online (Sandbox Code Playgroud)

OUTPUT1:

Source: local data frame [6 x 4]
Groups: name

      name score next.score before.score
    1   Al   100         60           NA
    2   Al    60         80          100
    3   Al    80         NA           60
    4  Jen    80        100           NA
    5 …
Run Code Online (Sandbox Code Playgroud)

r dplyr

36
推荐指数
3
解决办法
3万
查看次数

当我在`dplyr`之后加载`plyr`时,为什么汇总或变异不能用于group_by?

注意:此问题的标题已经过编辑,使其成为plyr功能掩盖其dplyr对应项时的问题的规范问题.问题的其余部分保持不变.


假设我有以下数据:

dfx <- data.frame(
  group = c(rep('A', 8), rep('B', 15), rep('C', 6)),
  sex = sample(c("M", "F"), size = 29, replace = TRUE),
  age = runif(n = 29, min = 18, max = 54)
)
Run Code Online (Sandbox Code Playgroud)

有了旧的,plyr我可以使用以下代码创建一个总结我的数据的小表:

require(plyr)
ddply(dfx, .(group, sex), summarize,
      mean = round(mean(age), 2),
      sd = round(sd(age), 2))
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样:

  group sex  mean    sd
1     A   F 49.68  5.68
2     A   M 32.21  6.27
3     B   F 31.87  9.80
4     B   M 37.54 …
Run Code Online (Sandbox Code Playgroud)

r plyr r-faq dplyr

17
推荐指数
1
解决办法
8669
查看次数

在R中的不平衡面板数据中创建滞后变量

我想在一个组中创建一个包含上一年变量值的变量.

     id   date        value
1     1   1992          4.1  
2     1     NA          4.5  
3     1   1991          3.3  
4     1   1990          5.3  
5     1   1994          3.0  
6     2   1992          3.2  
7     2   1991          5.2  
Run Code Online (Sandbox Code Playgroud)

value_lagged当组中缺少前一年时应该丢失 - 要么是因为它是组内的第一个日期(如第4,7行),要么是因为数据中存在年份缺口(如第5行).此外,value_lagged当缺少当前时间时应丢失(如第2行).

这给出了:

     id   date    value    value_lagged  
1     1   1992      4.1             3.3
2     1     NA      4.5              NA
3     1   1991      3.3             5.3
4     1   1990      5.3              NA
5     1   1994      3.0              NA
6     2   1992      3.2             5.2
7     2   1991      5.2              NA
Run Code Online (Sandbox Code Playgroud)

现在,在R中,我使用data.table …

r panel-data dplyr data.table

12
推荐指数
3
解决办法
4589
查看次数

data.table列上的diff

真的很沮丧.我只想区分data.table中的行.其中dif(n)=值(n) - 值(n-1).所以,与我的相比,结果应该移动1个位置,每个"变量"的第一个位置应该是NA.即dif应为(NA,4,-2,NA,1,-8).每个"变量的第一个值应该是NA,因为没有位置n-1.任何想法如何修改函数来实现这个?我真的想知道如何为了我自己的理解而使用rollapplyr来做这个.

谢谢.

data.table:

> dt
       variable value
    1:      xyz     3
    2:      xyz     7
    3:      xyz     5
    4:      abc     9
    5:      abc    10
    6:      abc     2
> dt[,dif := rollapplyr(value, 2, function(x){r <- diff(x,lag = 1)}, align = "right"), by = list(variable)]

> dt
   variable value dif
1:      xyz     3   4
2:      xyz     7  -2
3:      xyz     5   4
4:      abc     9   1
5:      abc    10  -8
6:      abc     2   1
Run Code Online (Sandbox Code Playgroud)

diff r rollapply data.table

4
推荐指数
1
解决办法
4059
查看次数

在data.table中创建多个lead变量

这个问题类似于一次在data.table中创建一堆滞后变量以及如何在每个组中创建滞后变量?,但据我所知,并不完全相同.

我想创造一些领先的变量,例如lead1,lead2lead3下面,通过分组groups.

示例数据

require(data.table)
set.seed(1)
data <- data.table(time =c(1:10,1:8),groups = c(rep(c("a","b"),c(10,8))), 
   value = rnorm(18))
data
    time groups       value
 1:    1      a -0.62645381
 2:    2      a  0.18364332
 3:    3      a -0.83562861
 4:    4      a  1.59528080
 5:    5      a  0.32950777
 6:    6      a -0.82046838
 7:    7      a  0.48742905
 8:    8      a  0.73832471
 9:    9      a  0.57578135
10:   10      a -0.30538839
11:    1      b  1.51178117
12:    2      b  0.38984324
13:    3 …
Run Code Online (Sandbox Code Playgroud)

r data.table

1
推荐指数
1
解决办法
971
查看次数

标签 统计

r ×5

data.table ×3

dplyr ×3

diff ×1

panel-data ×1

plyr ×1

r-faq ×1

rollapply ×1