Я хотел бы создать последний столбец ('wish_result') из 3 предыдущих столбцов ('group', 'animal' и 'full'). Ниже приведен код для воспроизводимого примера.Удалить строки из списка
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
В принципе, я хотел бы изменить «полный», чтобы он не включал соответствующее «животное». Я пробовал различные команды lapply, используя как списки, так и символьные версии этих столбцов, но не смог решить эту проблему.
Такая же идея в 'dplyr':' library (dplyr); data%>% mutate (желательно = Карта (setdiff, full, animal)) ' –
Это даст список обратно вместо символьного вектора (в соответствии с желаемым выходом OP). –
Я читал OP, так как им все равно, получают ли они список или строку, а преобразование тривиально. – eddi