gpt4 book ai didi

r - 如何在 R 中按组顺序标记类别?

转载 作者:行者123 更新时间:2023-12-04 11:02:10 25 4
gpt4 key购买 nike

这是一个非常简单的问题,但我有以下数据:

> head(Session_numbers)
ID Session
1 1 1_43392
2 1 1_43392
3 1 1_43392
4 1 1_43394
5 1 1_43394
6 1 1_43394
7 1 1_43398
8 1 1_43401
9 2 2_44502
10 2 2_44502

其中ID是每个主题的分组标签,每一行都有一个 session 代码,对应于时间点。我想在变量“Snum”中按顺序对 session 代码进行编号,以便每个 ID 的每个相同的 session 代码都被分组并被赋予相同的编号,例如:
   ID Session Snum
1 1 1_43392 1
2 1 1_43392 1
3 1 1_43392 1
4 1 1_43394 2
5 1 1_43394 2
6 1 1_43394 2
7 1 1_43398 3
8 1 1_43401 4
9 2 2_44502 1
10 2 2_44502 1

每个 ID 的 Session 数量不同,每个 Session 代码都是唯一的。

我曾尝试使用 ave , dplyrdata.table但我似乎无法正确理解,例如:
 DT <- data.table(Session_numbers)
DT[, Snum := seq_len(.N), by = list(ID, Session)]

> head(DT)
ID Session Snum
1: 1 1_43392 1
2: 1 1_43392 2
3: 1 1_43392 3
4: 1 1_43394 1
5: 1 1_43394 2
6: 1 1_43394 3

或使用 dplyr ,使用以下代码给我一条错误消息:
> Session_numbers %>%
+ group_by(ID, Session) %>%
+ mutate(Snum = row_number())
Error: row_number() should only be called in a data context
Call `rlang::last_error()` to see a backtrace

或与 ave
head(Session_numbers)
ID Session num
1 1 1_43392 1
2 1 1_43392 2
3 1 1_43392 3
4 1 1_43394 1
5 1 1_43394 2
6 1 1_43394 3

我的问题与此类似: Count number of observations/rows per group and add result to data frame

我错过了什么?

最佳答案

这是我们按“ID”和 match 分组的选项与 unique 的“ session ” 'Session' 的元素来获取索引

library(dplyr) 
Session_numbers %>%
group_by(ID) %>%
mutate(num = match(Session, unique(Session)))
# A tibble: 10 x 3
# Groups: ID [2]
# ID Session num
# <int> <chr> <int>
# 1 1 1_43392 1
# 2 1 1_43392 1
# 3 1 1_43392 1
# 4 1 1_43394 2
# 5 1 1_43394 2
# 6 1 1_43394 2
# 7 1 1_43398 3
# 8 1 1_43401 4
# 9 2 2_44502 1
#10 2 2_44502 1

或使用 base R
Session_numbers$num <- with(Session_numbers, ave(Session, ID, FUN = 
function(x) match(x, unique(x))))

如果我们有兴趣将非相邻元素更改为新数字,那么
library(data.table)
...
%>% mutate(num = rleid(Session))

数据
Session_numbers <- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L), 
Session = c("1_43392", "1_43392", "1_43392", "1_43394", "1_43394",
"1_43394", "1_43398", "1_43401", "2_44502", "2_44502")),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))

关于r - 如何在 R 中按组顺序标记类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58735437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com