我有一个数据框,其中一列由字符串组成,这是旅程的唯一标识符。可重现的数据框:
df <- data.frame(tours = c("ansc123123", "ansc123123", "ansc123123", "baa3999", "baa3999", "baa3999"),
order = rep(c(1, 2, 3), 2))
现在我的真实数据要大得多,有更多的观察结果和唯一标识符,但我希望在格式上有一个输出,就像你做这样的事情一样(但不是手动编码),所以旅程有相同的
tours
价值被编码为相同的旅程。
df$journey <- c(1, 1, 1, 2, 2, 2)
您可以将其转换为
factor
.
df$journey <- as.integer(factor(df$tours))
df$journey
#[1] 1 1 1 2 2 2
或使用
match
和unique
。
match(df$tours, unique(df$tours))
也可以使用
factor
并使用 unclass
获取整数值。这里保存了levels
,允许返回到原始值。
df$journey <- unclass(factor(df$tours))
df$journey
#[1] 1 1 1 2 2 2
#attr(,"levels")
#[1] "ansc123123" "baa3999"
levels(df$journey)[df$journey]
#[1] "ansc123123" "ansc123123" "ansc123123" "baa3999" "baa3999"
#[6] "baa3999"
dplyr
方法可以是将 mutate
与 cur_group_id()
和 .by
命令一起使用:
df %>%
mutate(journey = cur_group_id(), .by = tours)
或者旧版本的
dplyr
:
df %>%
group_by(tours) %>%
mutate(journey = group_indices())
输出:
# tours order journey
# 1 ansc123123 1 1
# 2 ansc123123 2 1
# 3 ansc123123 3 1
# 4 baa3999 1 2
# 5 baa3999 2 2
# 6 baa3999 3 2
library(data.table)
setDT(df)
df[, journey := .GRP, tours]
与
dplyr 1.1.0
https://dplyr.tidyverse.org/reference/group_data.html
我们可以使用:
group_indices()
返回一个与 .data 长度相同的整数向量,它给出了每一行所属的组。
library(dplyr)
df %>%
group_by(tours) %>%
group_indices()
[1] 1 1 1 2 2 2