我想创建前3列('group','animal'和'full')的最后一列('desired_result')。以下是可重复使用的示例的代码。从列表中删除特定于行的项目
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
基本上,我想修改'full',所以它不包含相应的'动物'。我已经尝试过使用这些列的列表和字符版本的各种lapply命令,但无法解决这个问题。
'dplyr':'library(dplyr); data%>%mutate(desired = Map(setdiff,full,animal))' –
这将返回一个列表而不是字符向量(按照OP的期望输出)。 –
我阅读OP,因为他们不关心他们是否得到一个列表或一个字符串,并且转换是微不足道的 – eddi