2017-01-25 14 views
1

Ich habe diesen Datenrahmen, und ich mochte die eindeutigen Werte in Spalte A zählen und sie in Spalte DCount eindeutige Werte in R und Anzeige in der Spalte

anzuzeigen Also die, wenn sonst Funktion in Spalte A aussehen sollte und 1 Anzeige für jeden neuen eindeutigen Benutzer

> DF_Have <- data.frame(A=c(1,2,2,3,3), B=1:5*10, C=1:5*100) 
> DF_Have 
    A B C 
1: 1 10 100 
2: 2 20 200 
3: 2 30 300 
4: 3 40 400 
5: 3 50 500 


> DF_Want 
    A B C D 
1: 1 10 100 1 
2: 2 20 200 2 
3: 2 30 300 2 
4: 3 40 400 3 
5: 3 50 500 3 
+0

Ist Spalte 'A' bestellt? – sgibb

Antwort

3
library(data.table) 
DF_Have$D <- rleid(DF_Have$A) 
DF_Have 
# A B C D 
#1 1 10 100 1 
#2 2 20 200 2 
#3 2 30 300 2 
#4 3 40 400 3 
#5 3 50 500 3 

eine weitere Option, ohne die Notwendigkeit einer externen Paket (DF_Have$A vorgesehen ist bestellt)

DF_Have$D <- cumsum(!duplicated(DF_Have$A)) 
+0

Ich muss nicht! @akrun –

2

Vielleicht hilft

library(data.table) 
setDT(DF_Have)[, D:= rleid(A)] 
DF_Have 
# A B C D 
#1: 1 10 100 1 
#2: 2 20 200 2 
#3: 2 30 300 2 
#4: 3 40 400 3 
#5: 3 50 500 3 

Oder mit dplyr

library(dplyr) 
DF_Have %>% 
    mutate(D = cumsum(c(TRUE, A[-1]!= A[-length(A)]))) 
2

Wir Basis R verwenden können match

DF_Have$D <- match(DF_Have$A, unique(DF_Have$A)) 
DF_Have 
# A B C D 
#1 1 10 100 1 
#2 2 20 200 2 
#3 2 30 300 2 
#4 3 40 400 3 
#5 3 50 500 3 
Verwandte Themen