我有一个带有非连续数字标签的组变量
user_id<-c(2,5,7,9)
我想用连续数字重命名user_id
。以下代码将起作用。但我想知道为什么?还有其他任何方式
new_id<- as.numeric(as.factor(user_id))
new_id
output:
1,2,3,4
答案 0 :(得分:3)
factor
级别的内部表示为integer
因此,当我们直接强制数字时,它将转换为该整数值。 OP在这里得到了预期的输出只是巧合。假设,我们通过sample
创建一个新的向量。
set.seed(24)
v1 <- sample(letters[1:4], 10, replace=TRUE)
as.numeric(factor(v1))
#[1] 2 1 3 3 3 4 2 4 4 2
其中
v1
#[1] "b" "a" "c" "c" "c" "d" "b" "d" "d" "b"
请注意,值会重复,并且不是序列的预期输出。
如果我们需要创建与&#39; new_id&#39;
相同的内容 seq(length(user_id))
答案 1 :(得分:2)
您可能希望使用seq_along(user_id)
来创建新ID
user_id <- c(2,5,7,9)
new_id <- seq_along(user_id)
# [1] 1 2 3 4
修改强>
作为@MatthewLundberg评论的后续内容,这是一个将考虑重复用户ID的版本;这使用dplyr
函数dense_rank
。这假设重复将获得相同的“new_id”。
library(dplyr)
user_id <- c(2, 5, 7, 9, 2, 2, 7)
new_id <- dense_rank(user_id)
new_id
# [1] 1 2 3 4 1 1 3