我有一个数据集,其中包含多个嵌套在个体中的观察结果。此示例数据集包括 id 和一周中的某天(dayweek,1-7)的列。我有来自每个人 3 天的观察结果。因此,一个人可能只提交了星期日/星期三/星期四 (1, 4, 5) 的报告,而另一个人可能提交了星期日/星期一/星期二 (1, 2, 3) 的报告,如下例所示:
df <- data.frame(
id = c(rep(1:2, each = 6),2),
dayweek = c(rep(c(1, 4, 5), each = 2),rep(c(1, 2, 3), each = 2), 3)
)
Run Code Online (Sandbox Code Playgroud)
我想设置一个列来标记每个人的第一天、第二天和第三天,如下所示:
df2 <- data.frame(
id = c(rep(1:2, each = 6),2),
dayweek = c(rep(c(1, 4, 5), each = 2),rep(c(1, 2, 3), each = 2), 3),
daynum = c(rep(1:3, each = 2, times = 2), 3)
)
Run Code Online (Sandbox Code Playgroud)
我尝试使用
df %>% group_indices(id, dayweek)
Run Code Online (Sandbox Code Playgroud)
但这会为每个单独的日期组合生成一个新的 ID。有什么好方法可以做到这一点?
提前致谢!
dplyr使用cumsum和!duplicated与dplyr
df %>%
group_by(id) %>%
mutate(daynum = cumsum(!duplicated(dayweek)))
# A tibble: 13 x 3
# Groups: id [2]
id dayweek daynum
<dbl> <dbl> <int>
1 1 1 1
2 1 1 1
3 1 4 2
4 1 4 2
5 1 5 3
6 1 5 3
7 2 1 1
8 2 1 1
9 2 2 2
10 2 2 2
11 2 3 3
12 2 3 3
13 2 3 3
Run Code Online (Sandbox Code Playgroud)
tapply 从基地 Runlist(tapply(df$dayweek, df$id, function(x) cumsum(!duplicated(x))))
1 1 2 2 3 3 1 1 2 2 3 3 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1850 次 |
| 最近记录: |