如何为R中的列中的元素分配顺序?

Nad*_*ain 5 r

在以下数据集中:

Day   Place   Name
 22     X      A
 22     X      A
 22     X      B
 22     X      A
 22     Y      C
 22     Y      C
 22     Y      D
 23     X      B
 23     X      A
Run Code Online (Sandbox Code Playgroud)

如何使用R按以下顺序为变量Name分配编号:

Day   Place   Name  Number
 22     X      A     1
 22     X      A     1
 22     X      B     2
 22     X      A     1
 22     Y      C     1
 22     Y      C     1
 22     Y      D     2
 23     X      B     1
 23     X      A     2
Run Code Online (Sandbox Code Playgroud)

简而言之,我需要根据他们在某一天和某个地方发生的顺序对名称进行编号.

ags*_*udy 3

在基本 R 中使用tapply

dat$Number <- 
unlist(tapply(dat$Name,paste(dat$Day,dat$Place),
       FUN=function(x){
         y <- as.character(x)
         as.integer(factor(y,levels=unique(y)))
}))

#    Day Place Name Number
# 1  22     X    A      1
# 2  22     X    A      1
# 3  22     X    B      2
# 4  22     Y    C      1
# 5  22     Y    C      1
# 6  22     Y    D      2
# 7  23     X    B      1
# 8  23     X    A      2
Run Code Online (Sandbox Code Playgroud)

主意

  1. 按日期和地点分组使用tapply
  2. 对于每个组,将名称强制创建为保留相同级别顺序的因子。
  3. 将创建的因子强制为整数以获得最终结果。

使用 data.table(糖语法) :

library(data.table)
setDT(dat)[,Number := {
  y <- as.character(Name)
  as.integer(factor(y,levels=unique(y)))
                   },"Day,Place"]

   Day Place Name Number
1:  22     X    A      1
2:  22     X    A      1
3:  22     X    B      2
4:  22     Y    C      1
5:  22     Y    C      1
6:  22     Y    D      2
7:  23     X    B      1
8:  23     X    A      2
Run Code Online (Sandbox Code Playgroud)