R语言 使用标识符对唯一观测值进行编码

1u4esq0p  于 2023-03-10  发布在  其他
关注(0)|答案(4)|浏览(188)

我有一个数据框,其中一列由字符串组成,这是旅程的唯一标识符。

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)
g0czyy6m

g0czyy6m1#

您可以将其转换为factor

df$journey <- as.integer(factor(df$tours))

df$journey
#[1] 1 1 1 2 2 2

或者使用matchunique

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"
mv1qrgav

mv1qrgav2#

dplyr方法可以是将mutatecur_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
rqmkfv5c

rqmkfv5c3#

library(data.table)

setDT(df)

df[, journey := .GRP, tours]
oalqel3c

oalqel3c4#

带有dplyr 1.1.0https://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

相关问题