[英]errors when using R function using variables/column names as arguments to create a new variable using mutate and 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
列,然后將Site
和index
字符串組合在一起用於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.