首页 > 解决方案 > 适用于“日期”类对象的 recode() 替代函数

问题描述

 track        type    shortcut player  system_played date       time_period  time record_duration
   <chr>        <chr>   <chr>    <chr>   <chr>         <date>     <chr>       <dbl>           <dbl>
 1 Luigi Racew~ Three ~ No       Salam   NTSC          1997-02-15 2M 12.99S   133.                1
 2 Luigi Racew~ Three ~ No       Dan     PAL           2020-11-06 1M 57.77S   118.              112
 3 Moo Moo Farm Three ~ No       Gregg G NTSC          1997-03-07 1M 35.48S    95.5              81
 4 Moo Moo Farm Three ~ No       MR      PAL           2020-02-18 1M 25.93S    85.9             374
 5 Koopa Troop~ Three ~ No       Launsp~ NTSC          1997-05-27 1M 42.01S   102.               95
 6 Koopa Troop~ Three ~ No       Dan     PAL           2020-07-13 1M 35.29S    95.3               0

我有一个如上所述的数据集,现在我想用包含相同值但名称不同的新列“newdate”替换列“date”。对于每个“曲目”,最早的“日期”将变为“First”,最晚的日期将变为“Last”。
我试过这段代码:

mydata <- data %>%
  group_by(track) %>%
  mutate(newdate = recode(date, "First", .default = "Last"))

并遇到错误信息:

错误:mutate()输入有问题newdate。x 没有适用于“日期”类对象的“重新编码”方法 i 输入newdaterecode(date, "First", .default = "Last"). i 错误发生在第 1 组:track = "Banshee Boardwalk"。

recode() 是否有可以申请“日期”类值的替代函数?

标签: rdategroup-bydplyrrecode

解决方案


如果我们想将minmax日期更改为character元素,我们需要先将datefromDate类转换为character

library(dplyr)
mydata <- data %>%
       group_by(track) %>%
       mutate(newdate = case_when(date == min(date) ~ "First",
                       date == max(date) ~ "Last", TRUE ~ as.character(date)))

推荐阅读