2017-12-23 2 views
1

I einen Datenrahmen aufweisen, die wie folgt aussieht:Entfernen von Daten aus einem Datenrahmen

    CEMETERY CONTEXT SEX BONE MEASUREMENT VALUE 
1 Medieval-St. Mary Graces 6225 MALE   HuE1 L 64.1 
2 Medieval-St. Mary Graces 6225 MALE   HuE1 R 62.7 
3 Medieval-St. Mary Graces 6225 MALE   HuHD L 50.1 
4 Medieval-St. Mary Graces 6225 MALE   HuHD R 51.3 
5 Medieval-St. Mary Graces 6225 MALE   HuL1 R 346.0 
6 Medieval-St. Mary Graces 6272 FEMALE   HuHD L 41.3 

muss ich alle Proben entfernen (Contexts), wo es nur eine Knochenmessung für links (L) oder (R), anstatt beides zu haben (zB wenn eine Probe HuE1L hat, aber nicht HuE1R, dann muss ich sie entfernen). Ich bin nicht sicher, was der beste Weg, dies zu tun ist, da der Datenrahmen zu groß ist, um bestimmte Zeilen einzeln zu entfernen. Um diesen Datenrahmen zu erstellen, habe ich die merge() -Funktion verwendet, so dass ich auch Datenrahmen für jeden Knochen habe (links und rechts sind in separaten Datenrahmen), wenn das für meine Arbeit etwas ändert?

EDIT: habe ich versucht, mit data.table:

library(data.table) 
setDT(df) 
setkey(df, CONTEXT, BONE) 
df[df[, .N, key(df)][N == 2, .(CONTEXT, BONE)]] 

aber das gibt diese:

     CEMETERY CONTEXT SEX EXPANSION VALUE 
    1: Medieval-Spital Square  19 FEMALE HuE1 L 57.9 
    2: Medieval-Spital Square  19 FEMALE HuE1 R 58.8 
    3: Medieval-Spital Square  19 FEMALE HuHD R 44.6 
    4: Medieval-Spital Square  19 FEMALE HuL1 L 326.0 
    5: Medieval-Spital Square  19 FEMALE HuL1 R 332.0 

474: Medieval-St. Mary Graces 16332 MALE RaHD L 25.4 
475: Medieval-St. Mary Graces 16344 MALE HuHD R 48.8 
476: Medieval-St. Mary Graces 20001 FEMALE HuHD L 40.2 
477: Medieval-St. Mary Graces 20001 FEMALE HuHD R 39.8 
478: Medieval-St. Mary Graces 20001 FEMALE RaHD R 20.8 

so hat es nicht wirklich entfernt Knochenmessungen, die nur links oder rechts. Zur Klarstellung - die Ls und Rs sind Teil der Spalte 'EXPANSION', keine separate Spalte - müsste ich zuerst eine eigene Spalte machen/wie würde ich das machen?

+0

@AftabHusain zählen möchten: bitte ** nicht hinzufügen „Danke im Voraus "** zu Posts, denen es fehlt. – usr2564301

+0

Bitte bearbeiten Sie keine Titel, die Dinge wie "AKTUALISIERT" hinzufügen. –

Antwort

1

können Sie Subsets data.table Datensatz mit:

library(data.table) 
setDT(df) 
setkey(df, CONTEXT, BONE) 
df[df[, .N, key(df)][N == 2, .(CONTEXT, BONE)]] 

#     CEMETERY CONTEXT SEX BONE MEASUREMENT VALUE 
# 1: Medieval-St. Mary Graces 6225 MALE HuE1   L 64.1 
# 2: Medieval-St. Mary Graces 6225 MALE HuE1   R 62.7 
# 3: Medieval-St. Mary Graces 6225 MALE HuHD   L 50.1 
# 4: Medieval-St. Mary Graces 6225 MALE HuHD   R 51.3 

Erläuterung:

  1. Ihre Daten in eine data.table (setDT()) Drehen
  2. Set-Taste (Index) in Ihren Daten (setkey()) . Mit setkey(df, CONTEXT, BONE) wie wir von CONTEXT und BONE
  3. Count Anzahl der Zeilen von key (df[, .N, key(df)])
  4. Subset Daten mit 2 Vorkommen (N == 2)
+0

danke! Muss ich das data.table-Paket herunterladen? Es sagt mir, dass es kein Paket namens "data.frame" gibt, wenn ich es in –

+0

@AislingMurray 'install.packages (" data.table ")' '. Sie sollten schauen, ob Sie mit großen Datensätzen arbeiten wollen – PoGibas

+0

Ich würde es anders machen in 'data.table' ;-) (siehe das verknüpfte doppelte Ziel) OTOH: das ist eine nette Annäherung zu – Jaap

Verwandte Themen