Ich möchte die letzte Spalte ('selled_result') aus den 3 vorherigen Spalten ('group', 'animal' und 'full') erstellen. Unten ist Code für ein reproduzierbares Beispiel.Zeilenspezifische Einträge aus der Liste entfernen
library(data.table)
data = data.table(group = c(1,1,1,2,2,2), animal = c('cat', 'dog', 'pig', 'giraffe', 'lion', 'tiger'), desired_result = c('dog, pig', 'cat, pig', 'cat, dog', 'lion, tiger', 'giraffe, tiger', 'giraffe, lion'))
data[, full := list(list(animal)), by = 'group']
data = data[, .(group, animal, full, desired_result)]
data
group animal full desired_result
1: 1 cat cat,dog,pig dog, pig
2: 1 dog cat,dog,pig cat, pig
3: 1 pig cat,dog,pig cat, dog
4: 2 giraffe giraffe,lion,tiger lion, tiger
5: 2 lion giraffe,lion,tiger giraffe, tiger
6: 2 tiger giraffe,lion,tiger giraffe, lion
Grundsätzlich möchte ich "voll" ändern, so dass es nicht das entsprechende "Tier" enthält. Ich habe verschiedene lapply-Befehle ausprobiert, die sowohl Listen- als auch Zeichenversionen dieser Spalten verwenden, aber dieses Problem nicht lösen konnten.
Gleiche Idee in 'dplyr':' Bibliothek (dplyr); Daten%>% mutieren (gewünscht = Map (setdiff, full, animal)) ' –
Dies ergibt eine Liste zurück anstelle des Zeichenvektors (je nach OPs gewünschter Ausgabe). –
Ich lese OP, da es ihnen egal ist, ob sie eine Liste oder einen String bekommen und die Konvertierung trivial ist. – eddi