在r + dplyr中复制Excel MAXIFS函数

时间:2018-06-01 18:57:46

标签: r dplyr

我的数据如下:

library(dplyr)
Source <- c(rep("A", 3), rep("B", 3))
ID <- c("X1", "X2", "X3", "X1", "X2", "X3")
Treatment <- c(0, 0, 1, 0, 0, 0)
Measure <- rnorm(n = 6, mean = 10)
df <- tibble(Source, ID, Treatment, Measure)
df
# A tibble: 6 x 4
  Source ID    Treatment Measure
  <chr>  <chr>     <dbl>   <dbl>
1 A      X1            0   10.2 
2 A      X2            0    8.86
3 A      X3            1   11.3 
4 B      X1            0   10.4 
5 B      X2            0    9.70
6 B      X3            0   10.9 

我想要的是一个与Treatment具有相同长度的变量,但如果给定源下的任何 ID具有treatment = 1,则取值1,如果不是,则取0 。类似于Excel中的MAXIFS()函数,它可以通过将其放入单元格来提供我想要的内容:

=MAXIFS([Treatment], [Source], [@[Source]])

但是我需要在dplyr中使用它,原因与我的示例数据的IRL版本的复杂性有关,后者更大更复杂。

1 个答案:

答案 0 :(得分:2)

在我用ungroup()认识到解决方案很简单之前,我已经写完这个问题并准备发布了:

fixed_df <- df %>%
  group_by(Source) %>%
  mutate(Treated = max(Treatment)) %>%
  ungroup()
fixed_df

# A tibble: 6 x 5
  Source ID    Treatment Measure Treated
  <chr>  <chr>     <dbl>   <dbl>   <dbl>
1 A      X1            0   10.2        1
2 A      X2            0    8.86       1
3 A      X3            1   11.3        1
4 B      X1            0   10.4        0
5 B      X2            0    9.70       0
6 B      X3            0   10.9        0