我想将变量组与外部列表(向量“Valid_codes”)进行比较。
考虑下面的例子
ID<-c("Carl", "Carl","Carl","Peter","Peter","Peter")
Question<-c("need","need","need","dyadic","dyadic","dyadic")
Image<-c("image1","image1","image1","image2","image2","image2")
V1<-c("A1","A2","C0","A3","A3","A1")
df<-data.frame(ID,Question,Image,V1)
df
Valid_codes<-c("A1","A2","A3","A4")
我希望得到如下输出,其中V1已根据ID和Question分组,每个组与向量Valid_codes进行比较,并将差异写入新列(MissingCodes,即:组中未使用有效代码)。图像编号应仅从原始图像转移,因为各组之间的图像编号相同。
| 分组(ID,问题)|图像|MissingCodes (setdiff())|
| - -----|- -----|- -----|
| 乔尔_需要|图片1| A3、A4|
| 彼得并矢|图像2| A2、A4|
我是数据wangling的新手,已经在完整的数据集上使用了setdiff(),但是当我想在分组数据上使用它时遇到了麻烦。实际数据集包含app。四万行。
df%>%
group_by(ID,Question, across(Image))%>%
mutate(Missing_Codes=setdiff(Valid_codes,?))
非常感谢任何帮助!
1条答案
按热度按时间wtlkbnrh1#
这应该可以做到:
请注意,
present_codes
和missing_codes
是list
类列,而不是字符向量。(present_codes
和missing_codes
的每一行都是一个字符向量,而不是列是一个字符向量。)这应该有助于以后的灵活性,但如果你想转换它们,你可以添加,例如,... |> mutate(missing_codes = sapply(missing_codes, toString))
。一个小提示-当你说 “图像没有。应该只是从原始的转移,因为它是统一的跨组”,你应该只是包括它在分组。当您将数据汇总到每组1行时,没有真实的的方法“带来一些沿着”-它要么是(a)分组的一部分,(b)它需要一个汇总函数将其折叠为一个值,或者(c)它将被删除。