我有一个名为Records的数据框,有2个向量Rank和Name
Rank Name
1 Ashish
1 Ashish
2 Ashish
3 Mark
4 Mark
1 Mark
3 Spencer
2 Spencer
1 Spencer
2 Mary
4 Joseph
我希望每个名称都应放在1,2,3或4个标签中,具体取决于它们的出现和唯一性:
我想创建一个名为Tagging
的新矢量所以输出应该是:
Rank 1有三个独特的元素Mark Spencer和Ashish所以这三个标签都是1。
Rank 2有一个唯一的记录是Mary,因为Ashish已经被分配了标签1所以Mary被标记为2.
Rank 3没有唯一的记录,因为Spencer和Mark已被分配1,所以我不能将3标记给任何人。
Rank 4有一个独特的记录Joseph,所以他被标记为4。
让我知道哪个功能可以帮助我做到这一点。
我不想使用循环,因为这是1000000行数据库
答案 0 :(得分:0)
使用setkey
包和data.table
的{{1}}功能:
unique
答案 1 :(得分:0)
以下解决方案遵循以下原则:一个人的最高等级也将成为该人的标签。
tbl <- read.table(header=TRUE, text='
Rank Name
1 Ashish
1 Ashish
2 Ashish
3 Mark
4 Mark
1 Mark
3 Spencer
2 Spencer
1 Spencer
2 Mary
4 Joseph
')
按排名&#39; tbl&#39; 数据框
tbl_ord <- tbl[with(tbl,order(Rank)),]
在相同排名中删除多次出现的名称
> name_ord<- tbl_ord[duplicated(tbl_ord$Rank),]
> name_ord
Rank Name
2 1 Ashish
6 1 Mark
9 1 Spencer
8 2 Spencer
10 2 Mary
7 3 Spencer
11 4 Joseph
显示唯一名称
#name_ord[unique(name_ord$Name),] #this will work too
> name_ord[!duplicated(name_ord$Name),]
Rank Name
2 1 Ashish
6 1 Mark
9 1 Spencer
10 2 Mary
11 4 Joseph