R语言遍历列表中data frame查找与目标数据框匹配值的问题
问题成因
%in%运算符对数据框/ tibble执行运算时,默认以列为单位做匹配,即判断整列是否等于右侧向量中的某一元素,而非逐元素遍历匹配。你原有代码返回的4个FALSE,对应每个tibble的4个列分别的匹配结果,自然不符合逐元素匹配的预期。
解决方案
根据你需要的返回结果格式,可选择以下两种实现方式:
方案1:保留原tibble的行列结构,返回同维度的布尔值数据框
result_struct <- lapply(l, function(df) { # 逐列遍历做元素级匹配 apply(df, 2, function(col) col %in% df1$a) })
运行后每个列表元素对应输入的tibble,返回5行4列的布尔矩阵,你可以直接通过行列位置定位匹配结果,其中result_struct[[1]]["3","c"]和result_struct[[2]]["3","c"]均为TRUE,对应两次匹配到333的预期结果,总计返回40个元素的布尔匹配结果。
方案2:拉平所有元素,返回一维布尔向量
如果不需要保留原数据结构,只想得到所有元素的匹配结果:
result_flat <- lapply(l, function(df) { # 把tibble所有元素拉平为向量后匹配 unlist(df) %in% df1$a })
内容的提问来源于stack exchange,提问作者user13267770
相关产品推荐
相关产品推荐

