[英]How to Use forcats::fct_collapse in a Function Across Different Dataframes with Different Factor Levels
[英]attempt to use fct_collapse() with class Date, must be factor or character vector, not an s3 object
我有一個我想要的數據集 plot,它需要對日期進行一些簡化,這將是我的 x 軸。 現在我有從 2020 年 3 月到 2022 年 11 月的每一天,但我想使用手動定義的 6 個月期間組,剩下的只是例外(這是我在這里的第一個問題,如果需要更多上下文,請告訴我).
無論如何,我的直覺是使用 fct_collapse,但我得到了這個錯誤:
.f
必須是因子或字符向量,而不是日期為 class 的 S3 object
我理解是因為我的專欄:by_date_total$date 是一個日期
我沒有看到可行的 forcats 操作,我唯一的選擇是轉換日期 class 然后將其重新轉換回日期嗎? 如果我將日期轉換為class,我設置的所需組將如何讀取? 我看到另一個答案使用 as.date.frame 將日期 class 強制轉換為字符 class,但是當我將其轉換為字符 class 時,我無法再使用 ('%y-%m-%d - %y-% m-%d') 但我想它從一開始就沒用過。
我的 dataframe by_date_total:
date total_deaths total_cases
<date> <dbl> <dbl>
2020-03-15 68 3595
2020-03-16 91 4502
2020-03-17 117 5901
2020-03-18 162 8345
2020-03-19 212 12387
2020-03-20 277 17998
2020-03-21 359 24507
這是我嘗試產生錯誤的方法:
plot_by_date <- by_date_total%>%
mutate(
date2 =
fct_collapse(date,
'6 months' = c("2020-03-15" - "2020-09-14"),
'12 months' = c("2021-09-15" - "2021-03-14"),
'18 months' = c("2022-03-15" - "2022-09-14"),
'18 months+' = c("2022-09-15" - "2022-11-14"))
)
plot_by_date
我沒有包含 ggplot(aes()) 信息的 rest,因為我想先驗證此步驟是否有效
將其更改為字符 class 想法:再次運行上述錯誤后:
二元運算符的非數字參數
plot_by_date <- as_data_frame(by_date_total) %>%
rename(Date = date) %>%
mutate(Date = str_replace_all(Date, "\\D", "-"),
Date = as.character(Date))
plot_by_date
case_when()
是一個很好的選擇。
data.frame(date=as.Date(c("2020-03-16", "2020-03-14", "2021-09-16", "2022-03-16", "2022-09-16", "2022-11-15"))) %>%
mutate(date2 = case_when(date >= "2022-09-15" ~ "18+ months",
date >= "2022-03-15" ~ "18 months",
date >= "2021-09-15" ~ "12 months",
date >= "2020-03-15" ~ "6 months",
TRUE ~ "other"))
# date date2
#1 2020-03-16 6 months
#2 2020-03-14 other
#3 2021-09-16 12 months
#4 2022-03-16 18 months
#5 2022-09-16 18+ months
#6 2022-11-15 18+ months
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.