假设我有以下数据框:
personid date measurement
1 x 23
1 x 32
2 y 21
3 x 23
3 z 23
3 y 23
我想通过测量列对此数据框进行排序,然后创建一个新列,该列是排序测量列中的序列,如下所示:
personid date measurement id
1 x 23 2
1 x 32 3
2 y 21 1
3 x 23 2
3 z 23 2
3 y 23 2
我的第一直觉是做一些事情:
unique_measurements <- data.frame(unique(sort(df$measurement)))
unique_dates$counter <- 1:nrow(unique_dates)
现在我基本上有一个数据框,表示从给定测量到正确计数器的映射。我认识到这是做错的方法,但是(1)我如何实际使用这种映射来实现我的目标; (2)这样做的正确方法是什么?
答案 0 :(得分:2)
这是一种更简单的方法:
df$id <- match(df$measurement, sort(unique(df$measurement)))
# personid date measurement id
# 1 1 x 23 2
# 2 1 x 32 3
# 3 2 y 21 1
# 4 3 x 23 2
# 5 3 z 23 2
# 6 3 y 23 2
答案 1 :(得分:2)
使用factor
作为中间人:
df$id = as.integer(factor(df$measurement))
如果您想使用您的方法,只需使用merge
(尽管它可能会破坏行顺序,但请使用dplyr::left_join
或data.table::merge
来保留原始行中的行顺序)。
unique_measurements <- data.frame(measurement = sort(unique(df$measurement)))
unique_dates$id <- 1:nrow(unique_dates)
merge(df, unique_dates)