Ich habe zwei data.tables
: samples, resources
Staggered Leveln/Neugruppierung/join in R mit data.table der X [Y] Syntax
resources
ist mit samples
über primary
und secondary
ids. Ich möchte die Informationen von den Ressourcen mit der Beispieltabelle zuerst über die primäre ID kombinieren, und nur wenn dies NA erzeugt, dann möchte ich auf die sekundären Ressourcen aus der gleichen Tabelle zurückgreifen (innerhalb einer data.table Befehlskette) .
# resources:
primary secondary info
1: 17 42 "I"
2: 18 NA "J"
3: 19 43 "K"
# samples:
name primary secondary
1: "a" 17 55
2: "b" 0 42
3 "c" 18 42
Das gewünschte Ergebnis wäre:
# joined tables:
name info # primary secondary
1: "a" "I"
2: "b" "I"
3: "c" "J"
Die über primary
beitreten erste ist einfach, es produziert
# Update:
samples <- data.table(name = letters[1:3],
primary = c(17, 0, 18),
secondary = c(55, 42, 42))
resources <- data.table(primary = 17:19,
secondary = c(42, NA, 43),
info = LETTERS[9:11])
# first join:
setkey(samples, primary)
setkey(resources, primary)
samples[resources]
name info # primary secondary
1: "a" "I"
2: "b" NA
3: "c" "J"
Aber dann? Ich muss Proben erneut mit setkey(samples, secondary)
, oder? Und dann Teilmenge nur zu jenen Zeilen, die NAs erzeugen. Aber all das ist innerhalb einer Befehlskette nicht wirklich möglich (und stellen Sie sich vor, dass es mehr als zwei Kriterien gibt ...). Wie kann ich das prägnanter erreichen?
... mit Code für die data.tables aktualisiert.
Vielleicht leicht reproduzierbar machen, indem man Code einbezieht, der 'samples' und' resources' konstruiert? –
nicht "data.table" freundlich, aber nur für den Fall, dass es hilfreich ist: http: // stackoverflow.com/questions/11369837/how-do-you-do-bedingte-links-join-in-r – npjc
es in einer Befehlskette zu tun ist fehlgeleitet – eddi