R语言中使用dplyr过滤因子型数据的方法咨询
解决dplyr筛选因子型变量的问题
错误原因
你的filter()语法完全写错了:
- 不能直接把因子变量(如
Site)作为筛选条件,filter()需要的是逻辑向量(由TRUE/FALSE组成的向量) - 匹配因子值需要用相等运算符
==,不是逗号分隔 - 若要同时满足“指定站点”和“指定功能组”,要用逻辑与
&,而非逻辑或|
正确的单组筛选代码
直接用==匹配因子的水平即可,因子类型不影响匹配逻辑:
# 筛选DRP站点的Graminoids组 Graminoids_DRP <- DRP.PSP.Func.Div.4m %>% filter(Site == "DRP" & Func_Group == "Graminoids")
批量生成所有站点+功能组的子集
如果需要一次性处理所有组合,不用手动逐个筛选,可以用以下两种方法:
方法1:用group_split拆分列表
自动按站点和功能组分拆数据集,返回一个列表,每个元素对应一个子集:
all_subsets <- DRP.PSP.Func.Div.4m %>% group_split(Site, Func_Group) # 调用DRP站点的Graminoids子集 target_subset <- all_subsets[[ which(sapply(all_subsets, function(x) unique(x$Site) == "DRP" & unique(x$Func_Group) == "Graminoids") ) ]]
方法2:循环批量保存到全局环境
自动生成每个组合的子集,并以“功能组_站点”的命名规则保存到环境中:
# 获取所有唯一的站点和功能组 site_unique <- unique(DRP.PSP.Func.Div.4m$Site) func_unique <- unique(DRP.PSP.Func.Div.4m$Func_Group) # 循环生成子集 for (site in site_unique) { for (func in func_unique) { subset_name <- paste(func, site, sep = "_") assign(subset_name, DRP.PSP.Func.Div.4m %>% filter(Site == site & Func_Group == func)) } }
内容的提问来源于stack exchange,提问作者Fabio Giacomelli
相关产品推荐
相关产品推荐

