R语言如何通过一个变量对另一个变量取子集,解决%in%返回logical(0)问题
问题原因
Itemname %in% name 返回 logical(0) 的核心原因是 Itemname 为矩阵/数组类型,未转换为一维向量时,匹配逻辑无法识别其内部单个元素。
解决代码
第一步:将矩阵格式的Itemname转换为一维字符向量
item_vec <- as.vector(Itemname)
注意:如果Itemname内部存储的不是字符类型,可使用
item_vec <- as.vector(as.character(Itemname))强制转换,保证和name的字符类型匹配,避免匹配失效。
第二步:按需求筛选结果
- 若需输出Itemname中在name里存在的取值(匹配第一个输出示例需求):
# 去重可根据实际需求选择是否保留unique() result <- unique(item_vec[item_vec %in% name])
- 若需输出name中在Itemname里存在的取值(匹配补充示例的需求):
result <- unique(name[name %in% item_vec])
第三步:按示例格式逐行输出
cat(result, sep = "\n")
效果验证
以补充示例测试:X为矩阵格式的["A","B","C","D"],Y为字符向量["A","B","C","D","E","F"],运行上述代码后输出结果为A、B、C、D,符合预期。
内容的提问来源于stack exchange,提问作者ujjwal tyagi
相关产品推荐
相关产品推荐

