R语言查找scale多唯一值对应的study_id(base/dplyr实现)
需求说明
在R中对给定数据集DATA完成筛选:按study_id字段分组,筛选出组内scale字段唯一取值个数大于1的study_id。
校验说明:正确返回结果为
Li,该研究下scale同时存在Other和MBTI两类取值。
测试数据集加载
先运行以下代码生成测试用的DATA对象:
m=" study_id year es_id r se n pub_type context ed_setting age_grp L1 L2 prof scale outcome Dreyer 1992 130 0 0.0574 305 DocDisse~ Foreign~ CollegeUni~ Adult Afri~ Engl~ NA Other Listen~ Dreyer 1992 131 0.04 0.0574 305 DocDisse~ Foreign~ CollegeUni~ Adult Afri~ Engl~ NA Other Writing Dreyer 1992 132 -0.03 0.0574 305 DocDisse~ Foreign~ CollegeUni~ Adult Afri~ Engl~ NA Other Reading Dreyer 1992 133 0 0.0574 305 DocDisse~ Foreign~ CollegeUni~ Adult Afri~ Engl~ NA Other Overall Ghapanchi 2011 89 0.31 0.0806 141 JournalA~ Foreign~ CollegeUni~ Adult Pers~ Engl~ NA Other Overall Hassan 2001 177 0.25 0.117 71 NA Foreign~ CollegeUni~ NA Arab~ Engl~ NA Other Speaki~ Kralova 2012 137 0.0252 0.117 75 JournalA~ Foreign~ CollegeUni~ Adult Slov~ Engl~ Inte~ Other Speaki~ Li 2009 55 -0.04 0.132 59 JournalA~ Foreign~ CollegeUni~ Adult Chin~ Engl~ NA Other Grammar Li 2009 56 0.355 0.124 59 JournalA~ Foreign~ CollegeUni~ Adult Chin~ Engl~ NA Other Pragma~ Li 2003 57 0.039 0.0735 187 JournalA~ Foreign~ CollegeUni~ Multip~ Chin~ Engl~ NA MBTI Overall " DATA <- read.table(text = m, h=T)
代码实现
dplyr版本
library(dplyr) DATA %>% group_by(study_id) %>% summarise(unique_scale_cnt = n_distinct(scale), .groups = "drop") %>% filter(unique_scale_cnt > 1) %>% pull(study_id)
运行输出:
[1] "Li"
Base R版本
# 分组统计每个study_id下scale的唯一值数量 agg_res <- aggregate(scale ~ study_id, data = DATA, FUN = function(x) length(unique(x))) # 筛选符合条件的结果 agg_res[agg_res$scale > 1, "study_id"]
运行输出:
[1] "Li"
内容的提问来源于stack exchange,提问作者rnorouzian
相关产品推荐
相关产品推荐

