2016-05-11 9 views
1

Das sind meine Daten.Wie kann ich alle doppelten Code löschen und nur den ersten Code für jeden der Code?

code long lat 
a 103.0059509 1.736281037 
a 103.0055008 1.736822963 
a 103.0049973 1.737220049 
a 103.0044479 1.737781048 
a 103.0041733 1.737781048 
b 103.003891 1.738060951 
b 103.0022202 1.738055944 
b 103.0019455 1.738332033 
b 103.0013885 1.738332033 
b 103.0011139 1.738610029 
c 103.0008316 1.738610029 
c 103.0005569 1.738891006 
c 103.000267 1.738891006 
c 103   1.738610029 

Ich möchte, dass mein Code nur den ersten Code zeigt. Kein Duplikat Und der Wert der lang lat bleibt nur sein Platz

+0

leider ein Duplikat question.i man denke nur könnte nicht jeder Methode gefunden werden meine leeren Raum mit NA ersetzen –

Antwort

2

Unter der Annahme, dass die ‚Code‘ Spalte character Klasse ist, wir die "" mit NA ersetzen und dann na.locf verwenden die NA-Werte mit dem vorherigen Nicht-NA-Wert zu ersetzen.

library(zoo) 
df1$code[df1$code==""] <- NA 
df1$code <- na.locf(df1$code) 

Wenn wir die Originaldaten aus der Ausgabe erhalten möchten, verwenden Sie data.table. Konvertieren Sie den 'data.frame' in 'data.table' (setDT(df1)), gruppiert nach 'code', erhalten wir den Zeilenindex (.I) für Zeilen beginnend mit 2 bis zur Anzahl der Zeilen (.N). Wenn wir den Spaltennamen nicht angeben, wird standardmäßig "V1" zugewiesen, um die Zeilenindexspalte auszugeben. Subset diese Spalte ($V1) und verwenden Sie als 'i' (:=) die Werte von "Code" zu "" zuweisen.

library(data.table) 
setDT(df1)[df1[, .I[2:.N] , code]$V1, code := ""][] 
# code  long  lat 
# 1: a 103.0060 1.736281 
# 2:  103.0055 1.736823 
# 3:  103.0050 1.737220 
# 4:  103.0044 1.737781 
# 5:  103.0042 1.737781 
# 6: b 103.0039 1.738061 
# 7:  103.0022 1.738056 
# 8:  103.0019 1.738332 
# 9:  103.0014 1.738332 
#10:  103.0011 1.738610 
#11: c 103.0008 1.738610 
#12:  103.0006 1.738891 
#13:  103.0003 1.738891 
#14:  103.0000 1.738610 

Weitere Informationen über die data.table in der vignettes

+0

, was die Art und Weise, wenn meine Daten umgekehrt davon? –

+0

@ahmadfikri Wenn Sie es von der Rückseite tun möchten, verwenden Sie 'na.locf (df1 $ code, fromLast = TRUE, na.rm = FALSE)' – akrun

+0

, was bedeutet, dass ich den ganzen Code habe, und ich will es als sein meine obigen Daten –

Verwandte Themen