R语言中用dplyr筛选后获取同setID全量数据的方法
解决方案:获取匹配值所属setID的全部行
我明白你的需求啦——你想先找到df2里所有和df1$col1[1](也就是"apples")匹配的行,然后把这些行对应的整个setID组都提取出来对吧?用dplyr可以轻松实现,给你两种常用方法:
方法1:分步提取setID再筛选
先把包含目标值的setID提取出来,再用这些ID筛选df2的全部行,逻辑直观易懂:
# 先定义目标值(避免重复写df1$col1[1]) target_fruit <- df1$col1[1] # 链式操作完成筛选 result_df <- df2 %>% # 第一步:筛选出所有包含目标水果的行,提取setID并去重 filter(col1 == target_fruit) %>% pull(setID) %>% unique() %>% # 第二步:用这些setID筛选df2的全部行 {filter(df2, setID %in% .)}
方法2:用semi_join更简洁
dplyr的semi_join专门用来保留左边数据框中与右边数据框匹配的行,这里可以用它直接关联setID,代码更紧凑:
target_fruit <- df1$col1[1] result_df <- df2 %>% # 找到所有包含目标水果的setID,再匹配df2的全部行 semi_join(df2 %>% filter(col1 == target_fruit), by = "setID")
两种方法得到的结果都和你期望的一致:
setID col1 1 1 apples 2 1 oranges 3 1 apples 4 1 banana 5 2 apples 6 2 grapes 7 2 oranges 8 2 apples 9 13 apples 10 21 apples 11 31 banana 12 41 oranges
内容的提问来源于stack exchange,提问作者Nix
相关产品推荐
相关产品推荐

