R语言如何筛选数据框中变化率超30%对应的唯一IDs
问题原因
你当前的代码存在两个核心问题:
- R的
if()判断接收逻辑向量时,默认只会读取第一个元素的值做判断,本身就不适合用来做逐行筛选的逻辑 - 即便条件成立,你直接调用
unique(df$IDs)是对全表的ID去重,没有先过滤符合perc_change>30的行
解决方法
基础R写法(无需安装额外包)
先筛选出所有perc_change大于30的行,再对这些行对应的IDs去重即可,一行代码就能实现:
# 写法1 unique(df$IDs[df$perc_change > 30]) # 写法2 等价 unique(df[df$perc_change > 30, "IDs"])
运行后返回的结果就是你需要的:1 2 3
dplyr写法(tidyverse风格,可读性更高)
如果你习惯用tidyverse生态的工具,可以用如下写法:
library(dplyr) # 返回向量形式的结果 df %>% filter(perc_change > 30) %>% pull(IDs) %>% unique() # 返回数据框形式的结果 df %>% filter(perc_change > 30) %>% distinct(IDs)
内容的提问来源于stack exchange,提问作者seak23
相关产品推荐
相关产品推荐

