簡體   English   中英

如何根據來自其他數據框的兩個條件創建列?

[英]How to create a column based on two conditions from other data frame?

我正在嘗試創建一列來標識該行是否滿足兩個條件。 例如,我有一個與此類似的表:

> dat <- data.frame(Date = c(rep(c("2019-01-01", "2019-02-01","2019-03-01", "2019-04-01"), 4)),
+                   Rep = c(rep("Mike", 4), rep("Tasha", 4), rep("Dane", 4), rep("Trish", 4)),
+                   Manager = c(rep("Amber", 2), rep("Michelle", 2), rep("Debbie", 4), rep("Brian", 4), rep("Tim", 3), "Trevor"),
+                   Sales = floor(runif(16, min = 0, max = 10)))
> dat                  
         Date   Rep  Manager Sales
1  2019-01-01  Mike    Amber     6
2  2019-02-01  Mike    Amber     3
3  2019-03-01  Mike Michelle     9
4  2019-04-01  Mike Michelle     2
5  2019-01-01 Tasha   Debbie     9
6  2019-02-01 Tasha   Debbie     6
7  2019-03-01 Tasha   Debbie     0
8  2019-04-01 Tasha   Debbie     4
9  2019-01-01  Dane    Brian     3
10 2019-02-01  Dane    Brian     6
11 2019-03-01  Dane    Brian     6
12 2019-04-01  Dane    Brian     1
13 2019-01-01 Trish      Tim     6
14 2019-02-01 Trish      Tim     7
15 2019-03-01 Trish      Tim     6
16 2019-04-01 Trish   Trevor     1

在更換了經理的銷售代表中,我想確定該經理在日期方面是第一名還是第二名。 理想的輸出如下所示:

         Date   Rep  Manager Sales  New_Column
1  2019-01-01  Mike    Amber     6           1
2  2019-02-01  Mike    Amber     3           1
3  2019-03-01  Mike Michelle     9           2
4  2019-04-01  Mike Michelle     2           2
5  2019-01-01 Trish      Tim     6           1
6  2019-02-01 Trish      Tim     7           1
7  2019-03-01 Trish      Tim     6           1
8  2019-04-01 Trish   Trevor     1           2

我已經嘗試了一些方法,但是它們還沒有完全解決。 我創建了兩個單獨的數據幀,其中一個由該Rep和關聯的管理器(df1)的第一個實例組成,另一個由該Rep和關聯的管理器(df2)的最后一個實例組成。 我嘗試過的最接近的代碼是:

dat$New_Column <- ifelse(dat$Rep %in% df1$Rep & dat$Manager %in% df1$Manager, 1,
                         ifelse(dat$Rep %in% df2$Rep & dat$Manager %in% df2$Manager, 2, NA))

但是,這被理解為兩個單獨的條件,而不是具有條件的條件(即,如果Mike在第一實例中存在而Amber在第一實例中存在,則分配1,而不是如果Mike與經理Amber在第一實例中存在時,則分配1)。 。 任何幫助將非常感激。 謝謝!

一種選擇是首先按“ Rep”分組,對唯一的“ Manager”數目為2的行進行filter ,然后通過將“ Manager”與“ Manager”的unique元素match來添加列以獲取索引

library(dplyr)
dat %>% 
  group_by(Rep) %>% 
  filter(n_distinct(Manager) == 2) %>%
  mutate(New_Column = match(Manager, unique(Manager)))
# A tibble: 8 x 5
# Groups:   Rep [2]
#  Date       Rep   Manager  Sales New_Column
#  <chr>      <chr> <chr>    <int>      <int>
#1 2019-01-01 Mike  Amber        6          1
#2 2019-02-01 Mike  Amber        3          1
#3 2019-03-01 Mike  Michelle     9          2
#4 2019-04-01 Mike  Michelle     2          2
#5 2019-01-01 Trish Tim          6          1
#6 2019-02-01 Trish Tim          7          1
#7 2019-03-01 Trish Tim          6          1
#8 2019-04-01 Trish Trevor       1          2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM