在dplyr中使用group_by()与filter()类似吗?

时间:2018-08-28 18:35:33

标签: r dplyr

在示例data.frame上:

df <- data.frame(V1 = c(1, 3, 4, NA, NA, 6, 9, NA, 10),
V2 = seq(1:9))

group_by()的方式使用filter()会得到以下结果:

df %>%
  group_by(miss = !is.na(V1)) %>%
  mutate(lag = V1 - lag(V1))

# A tibble: 9 x 4
# Groups:   miss [2]
     V1    V2 miss    lag
  <dbl> <dbl> <lgl> <dbl>
1    1.    1. TRUE    NA 
2    3.    2. TRUE     2.
3    4.    3. TRUE     1.
4   NA     4. FALSE   NA 
5   NA     5. FALSE   NA 
6    6.    6. TRUE     2.
7    9.    7. TRUE     3.
8   NA     8. FALSE   NA 
9   10.    9. TRUE     1.

这正是我想要的,但是我很好奇它是否也打算以这种方式使用group_by()

1 个答案:

答案 0 :(得分:0)

为了对这个有趣的问题有一个有据可查的答案-正如@Joran所指出的那样,可以从注释中将filter与表达式一起使用。正如@avid_useR所指出的,它实际上并不类似于case_when,而是更像=IF(OR(N11="";N12="";N13="");"";SUMIF(N11:N13;"<>""")) 之类的东西,因为没有删除任何行。