繁体   English   中英

在dplyr中找出分组值之间的差异

[英]Find difference between grouped values in dplyr

我想找出所观察到的案件与不属于案件类型的案件之间的区别:

set.seed(42)
df <- data.frame(type = factor(rep(c("A", "B", "C"), 2)), observed = rep(c(T,F), 3), 
                 val1 = sample(5:1, 6, replace = T), val2 = sample(1:5, 6, replace = T), 
                 val3 = sample(letters[1:5], 6, replace = T))

#      type observed val1 val2 val3
# 1    A     TRUE    1    4    e
# 2    B    FALSE    1    1    b
# 3    C     TRUE    4    4    c
# 4    A    FALSE    1    4    e
# 5    B     TRUE    2    3    e
# 6    C    FALSE    3    4    a

当只有两种不同类型的情况时,以下代码可以工作(例如levels(df$type) == c("A", "B") ,但它不适用于上面提供的df

df %>%
  group_by(type, observed) %>%
  summarise_if(is.numeric, funs(diff(., 1)))

所需的输出是:

# type  val1  val2
# A      0     0
# B     -1    -2
# C     -1     0

这样做:

df %>%
  group_by(type) %>%
  arrange(type, desc(observed)) %>%
  mutate_if(is.numeric,funs(. - lag(., default=0))) %>%
  summarise_if(is.numeric, tail, 1)

# # A tibble: 3 x 3
# type  val1  val2
# <fctr> <dbl> <dbl>
# 1      A    -1     0
# 2      B    -2     0
# 3      C     3     1

但是,其中一个dplyr向导可能会提出一种更优雅的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM