2016-07-12 5 views
1

Ich habe einen Datenrahmen, der eine große Anzahl von doppelten Personal-IDs von Personal enthält, das bei verschiedenen Firmen arbeitet.R - Wie wird für bestimmte Gruppen in meinem Dataset dupliziert?

würde Ich mag verwenden für die persönliche-IDs für jedes unterschiedliche Viertel in jeder verschiedenen festen dupliziert.

Example of what my data looks like

Grundsätzlich wäre Ich mag R dupliziert nur für die ids innerhalb Quartals 1 für Firma 1, dann für Quartal 2 für feste 1, dann 3 Quartal für festen laufen 1 usw. bis die Codes für feste 1 fertig sind, und dann 2 bewegen auf festen, wo es für Quartal 1 für feste wieder dupliziert Läufe 2 usw.

Example of the desired result

Mein Hauptproblem ist: Wenn Person A zeigt in mehreren verschiedenen oben qua rters oder in mehreren Unternehmen, das erste Mal seine/ihre ID zeigt in jedem Quartal/Firma bis sollteNICHT einen doppelten Wert betrachtet werden.

Jede Eingabe würde sehr geschätzt werden und ich werde sicherstellen, schnell zu sein, was auch immer Klärungen benötigt werden. Vielen Dank.

+1

Können Sie dies bitte als [mcve] bearbeiten? – Stedy

+0

Ich fürchte, ich weiß nicht wie, ich werde versuchen, die ursprüngliche Frage zu bearbeiten, um sie verständlicher zu machen. –

+0

Bearbeitet: Ich hoffe, das ist besser –

Antwort

0

Dies ist mit jedem Paket möglich, das die bequeme Gruppierung erleichtert, zum Beispiel "data.table" oder "dplyr".

Beispiele:

library(data.table) 
as.data.table(mydf)[, duplicates := duplicated(id), .(firm)][] 
#  firm quarter id duplicates 
# 1: 1  1 A  FALSE 
# 2: 1  2 B  FALSE 
# 3: 1  3 A  TRUE 
# 4: 1  4 C  FALSE 
# 5: 1  5 B  TRUE 
# 6: 2  1 A  FALSE 
# 7: 2  1 B  FALSE 
# 8: 2  2 B  TRUE 
# 9: 3  1 D  FALSE 
# 10: 3  2 E  FALSE 
# 11: 3  2 F  FALSE 
# 12: 3  3 E  TRUE 
# 13: 4  1 A  FALSE 
# 14: 4  1 C  FALSE 

oder

library(tidyverse) 
mydf %>% 
    group_by(firm) %>% 
    mutate(duplicates = duplicated(id)) 
# # A tibble: 14 x 4 
# # Groups: firm [4] 
#  firm quarter id duplicates 
# <dbl> <dbl> <chr> <lgl>  
# 1 1.00 1.00 A  F   
# 2 1.00 2.00 B  F   
# 3 1.00 3.00 A  T   
# 4 1.00 4.00 C  F   
# 5 1.00 5.00 B  T   
# 6 2.00 1.00 A  F   
# 7 2.00 1.00 B  F   
# 8 2.00 2.00 B  T   
# 9 3.00 1.00 D  F   
# 10 3.00 2.00 E  F   
# 11 3.00 2.00 F  F   
# 12 3.00 3.00 E  T   
# 13 4.00 1.00 A  F   
# 14 4.00 1.00 C  F 

oder in Basen- R:

within(mydf, { 
    duplicates = ave(id, firm, FUN = duplicated) 
}) 

Probendaten:

mydf <- structure(list(firm = c(1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 
    4), quarter = c(1, 2, 3, 4, 5, 1, 1, 2, 1, 2, 2, 3, 1, 1), id = c("A", 
    "B", "A", "C", "B", "A", "B", "B", "D", "E", "F", "E", "A", "C" 
    )), .Names = c("firm", "quarter", "id"), row.names = c(NA, 14L 
    ), class = "data.frame") 
Verwandte Themen