2016-04-07 6 views
2

Drehen habe ich einen Datenrahmen, df:einfache Art und Weise von Duplikaten in der leeren Einträge in einem Datenrahmen in R

ID <- c('ID1','ID1','ID2','ID3','ID3','ID3','ID4') 
hr <- c(10,20,10,15,20,10,15) 
DD <- c('DD1','DD2','DD3','DD4','DD5','DD6','DD7') 
ddhr <- c(15,20,30,20,10,15,10) 
df <- data.frame(ID,hr,DD,ddhr) 
df 
    ID hr DD ddhr 
1 ID1 10 DD1 15 
2 ID1 20 DD2 20 
3 ID2 10 DD3 30 
4 ID3 15 DD4 20 
5 ID3 20 DD5 10 
6 ID3 10 DD6 15 
7 ID4 15 DD7 10 

Dieser Datenrahmen von df$ID bestellt wird.

Ich mag diesen Datenrahmen ändern, so dass jedes Mal, wenn ein Duplikat df$ID Eintrag auftritt, wird dieser Eintrag duplizieren und den entsprechenden df$hr Eintrag sind leere Einträge umgewandelt ("").

Die ideale resultierender Datenrahmen würde wie folgt aussehen:

ID hr DD ddhr 
1 ID1 10 DD1 15 
2  DD2 20 
3 ID2 10 DD3 30 
4 ID3 15 DD4 20 
5  DD5 10 
6  DD6 15 
7 ID4 15 DD7 10 

Was ist der beste Weg, dies zu tun? Ich habe versucht:

df$ID=as.character(df$ID) 
df$ID=ifelse(!duplicated(df$ID)==FALSE,"",df$ID) 
df$hr=ifelse(df$ID=="","",df$hr) 

Aber das scheint ein bisschen lang, vor allem, wenn ich mehr als eine zusätzliche Spalte muss ich leer wollen aus (außer h).

Antwort

4

Sie können Folgendes versuchen. Beachten Sie, dass die Zeichenspalten (ID und DD) vom Typ Zeichen und nicht Faktor sind.

df[duplicated(df$ID),1:2] <- "" 
df 
    ID hr DD ddhr 
1 ID1 10 DD1 15 
2  DD2 20 
3 ID2 10 DD3 30 
4 ID3 15 DD4 20 
5  DD5 10 
6  DD6 15 
7 ID4 15 DD7 10 
Verwandte Themen