根据唯一值进行分类\

时间:2016-07-13 13:01:37

标签: r loops

我有一个名为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行数据库

2 个答案:

答案 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