r - 将日期变成有序变量
问题描述
我正在使用 R 中的日期,我想将日期转换为一个数字,该数字表示参与者通过测试所需的尝试次数。一些参与者进行了多次尝试,而其他参与者只进行了一次。此外,有些人比其他人早几年参加考试,所以我不在乎日期,只要是时间一或时间二等。
这是一个模拟数据集:
library(dplyr)
library(lubridate)
problem <- tibble(name = c("Britney", "Christina", "Justin", "Britney", "Britney", "Christina", "Christina", "Christina"),
score = c(1, 2, 3, 3, 3, 2, 4, 2),
date = ymd_hms(c("2019-02-26 00:18:09", "2019-04-26 00:18:09", "2019-02-20 00:18:09", "2018-02-26 00:18:09", "2017-02-26 00:18:09", "2016-02-26 00:18:09", "2015-02-26 00:18:09", "2010-02-26 00:18:09")))
这就是我希望它最终的样子:
solution <- tibble(name = c("Britney", "Christina", "Justin", "Britney", "Britney", "Christina", "Christina", "Christina"),
score = c(1, 2, 3, 3, 3, 2, 4, 2),
date = ymd_hms(c("2019-02-26 00:18:09", "2019-04-26 00:18:09", "2019-02-20 00:18:09", "2018-02-26 00:18:09", "2017-02-26 00:18:09", "2016-02-26 00:18:09", "2015-02-26 00:18:09", "2010-02-26 00:18:09")),
order = c(3, 4, 1, 2, 1, 3, 2, 1))
solution
谢谢!
解决方案
您可以按名称分组并采用相反的顺序,即
library(dplyr)
problem %>%
group_by(name) %>%
mutate(order = rev(seq(n())))
这使,
# A tibble: 8 x 4 # Groups: name [3] name score date order <chr> <dbl> <dttm> <int> 1 Britney 1 2019-02-26 00:18:09 3 2 Christina 2 2019-04-26 00:18:09 4 3 Justin 3 2019-02-20 00:18:09 1 4 Britney 3 2018-02-26 00:18:09 2 5 Britney 3 2017-02-26 00:18:09 1 6 Christina 2 2016-02-26 00:18:09 3 7 Christina 4 2015-02-26 00:18:09 2 8 Christina 2 2010-02-26 00:18:09 1
推荐阅读
- mysql - SQL SUM TOP 5 每个类别的值,然后 SUM 类别总计每个 ID
- python - 后端 Web 服务可以将 selenium 与无头 Chromium 一起使用吗?
- java - 执行 shell 命令时 channelExec.setCommand() 不工作
- java - 没有在数据库中保存枚举值,为什么?
- docker - 无法从 Windows 容器显示 GUI 应用程序
- c# - 选择 UI 项目,然后做某事
- javascript - 子组件在反应钩子中调用useState()时如何实现条件渲染?
- c# - SQLite插入循环错误'SQLiteException:'数据库被锁定'
- javascript - Highcharts - 自定义 rangeSelector 按钮并将 xAxis 从每小时更改为日期
- jenkins - Jenkins Groovy Pipeline org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:未找到此类字段:字段 groovy.util.Node