将日期重新编码为主题内的学习日

标签 r recode

我有数据显示受试者在 6-7 天内每天完成多次评分。每天的评分数量各不相同。该数据集包括主题 ID、日期和评级。我想创建一个新变量,将每个科目的日期重新编码为“学习日”——因此 1 表示第一天的评分,2 表示第二天的评分,等等。

例如,我想采用这个:

id  Date    Rating
1   10/20/2018  2
1   10/20/2018  3
1   10/20/2018  5
1   10/21/2018  1
1   10/21/2018  7
1   10/21/2018  9
1   10/22/2018  4
1   10/22/2018  5
1   10/22/2018  9
2   11/15/2018  1
2   11/15/2018  3
2   11/15/2018  4
2   11/16/2018  3
2   11/16/2018  1
2   11/17/2018  0
2   11/17/2018  2
2   11/17/2018  9

最后是这样的:

id  Day Date    Rating
1   1   10/20/2018  2
1   1   10/20/2018  3
1   1   10/20/2018  5
1   2   10/21/2018  1
1   2   10/21/2018  7
1   2   10/21/2018  9
1   3   10/22/2018  4
1   3   10/22/2018  5
1   3   10/22/2018  9
2   1   11/15/2018  1
2   1   11/15/2018  3
2   1   11/15/2018  4
2   2   11/16/2018  3
2   2   11/16/2018  1
2   3   11/17/2018  0
2   3   11/17/2018  2
2   3   11/17/2018  9

我打算考虑设置某种循环,但我认为值得询问是否有更有效的方法来实现这一点。是否有任何功能可以让我自动执行此类操作?非常感谢您的建议。

最佳答案

因为您想在每个 id 之后重置计数,使这个问题有点不同。

仅使用基本 R,我们可以 split Date基于id然后创建每个不同组的计数。

df$Day <- unlist(sapply(split(df$Date, df$id), function(x) match(x,unique(x))))


df
#   id       Date Rating Day
#1   1 10/20/2018      2   1
#2   1 10/20/2018      3   1
#3   1 10/20/2018      5   1
#4   1 10/21/2018      1   2
#5   1 10/21/2018      7   2
#6   1 10/21/2018      9   2
#7   1 10/22/2018      4   3
#8   1 10/22/2018      5   3
#9   1 10/22/2018      9   3
#10  2 11/15/2018      1   1
#11  2 11/15/2018      3   1
#12  2 11/15/2018      4   1
#13  2 11/16/2018      3   2
#14  2 11/16/2018      1   2
#15  2 11/17/2018      0   3
#16  2 11/17/2018      2   3
#17  2 11/17/2018      9   3

我不知道我是如何错过这个的,但感谢@thelatemail,他提醒我这基本上与

library(dplyr)
df %>%
  group_by(id) %>%
  mutate(Day = match(Date, unique(Date)))

并且

df$Day <- as.numeric(with(df, ave(Date, id, FUN = function(x) match(x, unique(x)))))

关于将日期重新编码为主题内的学习日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53808031/

相关文章:

r - 如何将一系列值(数字)重新编码为因子变量?

一次用多个列中的值替换字符串

loops - 根据多个变量的分数求和

r - 如何使用 R 中的子函数更改具有加号 (+) 的因子水平?

r - 如何查看 quantreg 包中的 .Fortran 函数

r - 接近下溢限制的数字在 tibble 中显示为 `Inf.e-324`?

R:为什么并行速度(慢很多)?使用并行(左)连接大量大文件的最佳策略是什么?

r - 为什么我的条件 ifelse 重新编码没有返回预期值?

R:从表中删除支配行的快速方法是什么?

R `Inf` 当它有 `Date` 类时正在打印 `NA`