簡體   English   中英

是否可以使用 case_when 函數或使用不同的函數在列中有多個變量名(不是數字)

[英]Is it possible to have multiple variable names (not numeric) in column using the case_when function or by using a different function

這是我的一大塊數據框看起來像這樣(稱為 cap1)

structure(list(date = c("3/21/2020", "3/21/2020", "3/22/2020", 
 "3/23/2020", "3/23/2020", "3/23/2020", "3/23/2020", "3/23/2020", 
 "3/23/2020", "3/23/2020", "3/23/2020", "3/24/2020", "3/24/2020", 
 "3/25/2020", "3/25/2020", "3/25/2020", "3/26/2020", "3/26/2020", 
 "3/29/2020", "3/29/2020", "3/29/2020", "3/29/2020", "3/29/2020", 
 "3/29/2020", "3/29/2020", "3/29/2020", "3/29/2020", "3/29/2020", 
 "3/30/2020", "3/30/2020"), Site = c("Jag", "Jag", "Jag", "Jag", 
 "Jag", "Jag", "Jag", "Jag", "Jag", "Jag", "Jag", "Bla", "Bla",  "Bla",
 "Bla", "Bla", "Bla", "Bla", "Lon", "Lon", "Lon", "Lon",  "Lon", "Lon",
 "Lon", "Lon", "Lon", "Lon", "Lon", "Lon"), Column1 = c("JagB60", 
 "JagB57", "JagB27", "JagA55", "JagC52", "JagB53", "JagB85", "JagC66", 
 "JagB79", "JagB37", "JagA81", "BlaC64", "BlaB81", "BlaC77", "BlaC76", 
 "BlaC11", "BlaC64", "BlaC19", "LonB11", "LonC73", "LonC16", "LonC26", 
 "LonB9", "LonC80", "LonB55", "LonB2", "LonB70", "LonC24", "LonB81", 
 "LonC67"), Species = c("Per m. ", "Per m. ", "Mic o.", "Mic o.",  "Per
 m. ", "Per m. ", "Per m. ", "Per m. ", "Per m. ", "Per m. ",  "Per l. 
 ", "Per m. ", "Per m. ", "Per m. ", "Per m. ", "Per m. ",  "Per m. ",
 "Per m. ", "Per m. ", "Per m. ", "Per m. ", "Per m. ",  "Per m. ",
 "Per m. ", "Per m. ", "Per m. ", "Per m. ", "Per m. ",  "Per m. ",
 "Per m. "), PIT.Tag = c(9460838L, 9460784L, 1234573L,  9460831L,
 9460845L, 9460838L, 9460794L, 9460785L, 9460784L, 9460781L,  9460777L,
 9460780L, 2055339L, 9460813L, 9460782L, 9460786L, 9460782L,  9460786L,
 9460810L, 9460834L, 9460795L, 9460798L, 9460788L, 9460842L,  9460822L,
 2055397L, 2055377L, 2055393L, 2055380L, 2055384L), 
     Gender = c("M", "F", "M", "F", "F", "M", "F", "F", "F", "M", 
     "F", "M", "F", "F", "F", "M", "F", "M", "M", "M", "M", "M", 
     "F", "M", "M", "M", "F", "M", "M", "F")), row.names = c(NA,  30L), class = "data.frame")
 

我需要創建一個名為 session 的列,它的名稱與日期列相關聯。 因此,如果日期是 2020 年 3 月 21 日,則在會話列下它將被稱為 Jag_1。 我最初有一個會話列,它只是用數字(1、2、3、4、5、6)標記了不同的日期,但這不再適用於我的分析,但由於我有該代碼,所以有一種方法可以更新到什么我現在需要。 這是代碼的樣子。

cap1 %<>% 
  mutate(Session = case_when(date %in%        
                               c("3/21/2020", "3/22/2020", "3/23/2020",      
                                 "3/24/2020", "3/25/2020", "3/26/2020",
                                 "3/29/2020", "3/30/2020", "3/31/2020",
                                 "4/1/2020", "4/2/2020","4/3/2020")~ 1,
                             date %in% c("4/9/2020", "4/10/2020", "4/11/2020",       
                                         "4/6/2020", "4/7/2020", "4/8/2020",
                                         "4/14/2020", "4/15/2020", "4/16/2020",
                                         "4/17/2020", "4/18/2020", "4/19/2020")~ 2,
                             date %in% c("4/28/2020", "4/29/2020", "4/30/2020", 
                                         "4/23/2020", "4/24/2020", "4/25/2020", 
                                         "5/1/2020", "5/2/2020", "5/3/2020", 
                                         "5/6/2020", "5/7/2020", "5/8/2020")~ 3,
                             date %in% c("5/15/2020", "5/16/2020", "5/17/2020",
                                         "5/10/2020", "5/11/2020", "5/12/2020",
                                         "5/18/2020", "5/19/2020", "5/20/2020",
                                         "5/24/2020", "5/25/2020", "5/26/2020")~4,
                             date %in% c("6/1/2020", "6/2/2020", "6/3/2020",
                                         "5/27/2020", "5/28/2020", "5/29/2020",
                                         "6/4/2020", "6/5/2020", "6/6/2020",
                                         "6/9/2020", "6/10/2020", "6/11/2020")~5, 
                             date %in% c("6/17/2020", "6/18/2020", "6/19/2020",
                                         "6/12/2020", "6/13/2020", "6/14/2020",
                                         "6/20/2020", "6/21/2020", "6/22/2020",
                                         "6/24/2020", "6/25/2020", "6/26/2020")~6,

我嘗試更改代碼以查看它是否可以工作,但到目前為止還沒有適合我。 我收到錯誤消息,說它找不到 Jag_1 或者它無法運行。 這就是我的嘗試的樣子。

cap1 %<>% 
  mutate(Session = case_when(date %in%         
                               c("3/21/2020", "3/22/2020", "3/23/2020")~ Jag_1,      
                                 c("3/24/2020", "3/25/2020", "3/26/2020")~Bla_1,
                                 c("3/29/2020", "3/30/2020", "3/31/2020")~Lon_1,
                                 c("4/1/2020", "4/2/2020","4/3/2020")~ Pat_1,
                             date %in% c("4/9/2020", "4/10/2020", "4/11/2020")~Pat_2,       
                                        c("4/6/2020", "4/7/2020", "4/8/2020")~Jag_2,
                                         c("4/14/2020", "4/15/2020", "4/16/2020")~Bla_2,
                                         c("4/17/2020", "4/18/2020", "4/19/2020")~ Lon_2

為了澄清起見,我想創建一個如下所示的數據框。 在日期。

 date Site Column1 Species PIT.Tag Gender         Session
    1 3/21/2020  Jag  JagB60 Per m.  9460838      M   Jag_1
    2 3/21/2020  Jag  JagB57 Per m.  9460784      F   Jag_1
    3 3/22/2020  Jag  JagB27  Mic o. 1234573      M   Jag_1
    4 3/23/2020  Jag  JagA55  Mic o. 9460831      F   Jag_1
    5 3/23/2020  Jag  JagC52 Per m.  9460845      F   Jag_1
    6 3/23/2020  Jag  JagB53 Per m.  9460838      M   Jag_1
    7  3/23/2020  Jag  JagB85  Per m.  9460794      F Jag_1
8  3/23/2020  Jag  JagC66  Per m.  9460785      F     Jag_1
9  3/23/2020  Jag  JagB79  Per m.  9460784      F     Jag_1
10 3/23/2020  Jag  JagB37  Per m.  9460781      M     Jag_1
11 3/23/2020  Jag  JagA81 Per l.   9460777      F     Jag_1
12 3/24/2020  Bla  BlaC64  Per m.  9460780      M     Bla_1
13 3/24/2020  Bla  BlaB81  Per m.  2055339      F     Bla_1
14 3/25/2020  Bla  BlaC77  Per m.  9460813      F     Bla_1
15 3/25/2020  Bla  BlaC76  Per m.  9460782      F     Bla_1
16 3/25/2020  Bla  BlaC11  Per m.  9460786      M     Bla_1
17 3/26/2020  Bla  BlaC64  Per m.  9460782      F     Bla_1
18 3/26/2020  Bla  BlaC19  Per m.  9460786      M     Bla_1
19 3/29/2020  Lon  LonB11  Per m.  9460810      M     Lon_1
20 3/29/2020  Lon  LonC73  Per m.  9460834      M     Lon_1
21 3/29/2020  Lon  LonC16  Per m.  9460795      M     Lon_1
22 3/29/2020  Lon  LonC26  Per m.  9460798      M     Lon_1
23 3/29/2020  Lon   LonB9  Per m.  9460788      F     Lon_1
24 3/29/2020  Lon  LonC80  Per m.  9460842      M     Lon_1
25 3/29/2020  Lon  LonB55  Per m.  9460822      M     Lon_1
26 3/29/2020  Lon   LonB2  Per m.  2055397      M     Lon_1
27 3/29/2020  Lon  LonB70  Per m.  2055377      F     Lon_1
28 3/29/2020  Lon  LonC24  Per m.  2055393      M     Lon_1
29 3/30/2020  Lon  LonB81  Per m.  2055380      M     Lon_1
30 3/30/2020  Lon  LonC67  Per m.  2055384      F     Lon_1

更新
查看您的case_when示例,似乎所有_2會話都發生在某個日期之后。
如果這是真的,您可以根據該日期交叉創建一個index列,然后將Siteindex字符串組合在一起用於session
像這樣:

cap1 %>%
  group_by(Site) %>%
  mutate(date = lubridate::mdy(date),
         index = if_else(date < "2020-04-09", 1, 2),
         session = paste(Site, index, sep = "_")) 

上一個答案
您的想法是正確的,只是您的語法有點偏差。 在每個case_when情況下使用date %in% ,並引用您的標簽:

cap1 %>% 
  mutate(Session = case_when(
    date %in% c("3/21/2020", "3/22/2020", "3/23/2020") ~ "Jag_1",     
    date %in% c("3/24/2020", "3/25/2020", "3/26/2020") ~ "Bla_1",
    date %in% c("3/29/2020", "3/30/2020", "3/31/2020") ~ "Lon_1",
    date %in% c("4/1/2020", "4/2/2020","4/3/2020") ~ "Pat_1",
    date %in% c("4/9/2020", "4/10/2020", "4/11/2020") ~ "Pat_2",   
    date %in% c("4/6/2020", "4/7/2020", "4/8/2020") ~ "Jag_2",
    date %in% c("4/14/2020", "4/15/2020", "4/16/2020") ~ "Bla_2",
    date %in% c("4/17/2020", "4/18/2020", "4/19/2020") ~ "Lon_2"
    )
  )

輸出:

        date Site Column1    Species PIT.Tag Gender Session
1  3/21/2020  Jag  JagB60    Per m.  9460838      M   Jag_1
2  3/21/2020  Jag  JagB57    Per m.  9460784      F   Jag_1
3  3/22/2020  Jag  JagB27     Mic o. 1234573      M   Jag_1
4  3/23/2020  Jag  JagA55     Mic o. 9460831      F   Jag_1
5  3/23/2020  Jag  JagC52  Per\n m.  9460845      F   Jag_1
6  3/23/2020  Jag  JagB53    Per m.  9460838      M   Jag_1
7  3/23/2020  Jag  JagB85    Per m.  9460794      F   Jag_1
8  3/23/2020  Jag  JagC66    Per m.  9460785      F   Jag_1
9  3/23/2020  Jag  JagB79    Per m.  9460784      F   Jag_1
10 3/23/2020  Jag  JagB37    Per m.  9460781      M   Jag_1
11 3/23/2020  Jag  JagA81 Per l. \n  9460777      F   Jag_1
12 3/24/2020  Bla  BlaC64    Per m.  9460780      M   Bla_1
13 3/24/2020  Bla  BlaB81    Per m.  2055339      F   Bla_1
14 3/25/2020  Bla  BlaC77    Per m.  9460813      F   Bla_1
15 3/25/2020  Bla  BlaC76    Per m.  9460782      F   Bla_1
16 3/25/2020  Bla  BlaC11    Per m.  9460786      M   Bla_1
17 3/26/2020  Bla  BlaC64    Per m.  9460782      F   Bla_1
18 3/26/2020  Bla  BlaC19    Per m.  9460786      M   Bla_1
19 3/29/2020  Lon  LonB11    Per m.  9460810      M   Lon_1
20 3/29/2020  Lon  LonC73    Per m.  9460834      M   Lon_1
21 3/29/2020  Lon  LonC16    Per m.  9460795      M   Lon_1
22 3/29/2020  Lon  LonC26    Per m.  9460798      M   Lon_1
23 3/29/2020  Lon   LonB9    Per m.  9460788      F   Lon_1
24 3/29/2020  Lon  LonC80    Per m.  9460842      M   Lon_1
25 3/29/2020  Lon  LonB55    Per m.  9460822      M   Lon_1
26 3/29/2020  Lon   LonB2    Per m.  2055397      M   Lon_1
27 3/29/2020  Lon  LonB70    Per m.  2055377      F   Lon_1
28 3/29/2020  Lon  LonC24    Per m.  2055393      M   Lon_1
29 3/30/2020  Lon  LonB81    Per m.  2055380      M   Lon_1
30 3/30/2020  Lon  LonC67    Per m.  2055384      F   Lon_1

暫無
暫無

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

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