2016-07-24 11 views
0

subsetting habe ich dieser Datensatz unterdie erste Zeile jedes Elements in einer Variablen

Name ID DATES R 1 @0CC 71476 20000704 11 2 @0CC 71476 20001204 11 3 @0RM 49960 20000131 2 4 @0RM 73565 20000919 1 5 @0RM 59451 20001023 1 6 @0RM 44457 20001214 1 7 @0TL 48061 20000627 31 8 @0TL 19824 20000929 3 9 @0TL 70970 20001211 1 10 @0TL 73862 20001212 2 11 @0TL 48061 20001227 31 12 @1AJ 58875 20001214 1 13 @1AJ 56014 20001214 3 14 @1AJ 47340 20001214 3 15 @1AJ 19813 20001214 3 16 @1AL 44416 20000303 31 17 @1AL 59184 20000413 323 18 @1AL 44416 20000517 31 19 @1AL 52718 20000621 1 20 @1AL 59184 20000707 323 21 @1AL 59184 20000801 323 22 @1AL 72832 20001127 43 23 @1AL 73568 20001130 3 24 @1AL 72832 20001211 43 25 @1FF 58781 20000719 1 26 @1FF 44505 20000801 12 27 @1FF 73559 20001110 1 28 @1FF 44505 20001218 12 29 @1FF 47276 20001227 3

gezeigt, was ich versuche zu tun, ist, dass für jeden eindeutigen Namen, und jede eindeutige ID, ich möchte erstellen eine Teilmenge dieser Datenrahmen, zB

Name ID DATES R 1 @0CC 71476 20000704 11 3 @0RM 49960 20000131 2 4 @0RM 73565 20000919 1 5 @0RM 59451 20001023 1 6 @0RM 44457 20001214 1 7 @0TL 48061 20000627 31 8 @0TL 19824 20000929 3 9 @0TL 70970 20001211 1 10 @0TL 73862 20001212 2 12 @1AJ 58875 20001214 1 13 @1AJ 56014 20001214 3 14 @1AJ 47340 20001214 3 15 @1AJ 19813 20001214 3 16 @1AL 44416 20000303 31 17 @1AL 59184 20000413 323 19 @1AL 52718 20000621 1 22 @1AL 72832 20001127 43 23 @1AL 73568 20001130 3 25 @1FF 58781 20000719 1 26 @1FF 44505 20000801 12 27 @1FF 73559 20001110 1 29 @1FF 47276 20001227 3

ich denke dabei an die Verwendung von zwei for-Schleifen

for(i in unique(noanalysttest$IBTKR2)){ 
for(j in unique(noanalysttest$AMASKCD)){ 
R2<-subset(DT) 
} 
R2 

Aber das gibt mir nicht die richtige Lösung. Viel Hilfe wird geschätzt.

Vielen Dank!

+0

@Frank Dank für den doppelten Hinweis darauf, ich durch diesen Thread las und ich versuchte, '' df1 [! Dupliziert (df1 [c ("Name", " ID ")]),]' 'was nicht funktioniert, aber' 'unique (setDT (df1), by = c (" Name "," ID "))' 'nach dem Betrachten von @akrun Lösung. Vielen Dank für die Hilfe. – Donkeykongy

Antwort

2

Wir slice von dplyr nach dem Gruppieren von 'Name' verwenden und 'ID'

library(dplyr) 
df1 %>% 
    group_by(Name, ID) %>% 
    slice(1) 

Oder eine base R Option

df1[!duplicated(df1[c("Name", "ID")]),] 

Oder mit data.table wäre

library(data.table) 
unique(setDT(df1), by = c("Name", "ID")) 

Oder wie @Frank vorgeschlagen

setDT(df1)[, .SD[1L], by = .(Name, ID)] 
+1

@Frank Ist es, ich dachte, es war schneller. Danke für den Tipp – akrun

+1

vielen Dank für Ihre Hilfe! – Donkeykongy