使用标识符编码独特的观察

问题描述 投票:0回答:4

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

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)
r dataframe row encode
4个回答
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"   

0
投票

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

0
投票
library(data.table)

setDT(df)

df[, journey := .GRP, tours]

0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.