如何在R的tidyverse中用where子句筛选含Math/Eng及数值型变量
解决方案
要筛选出包含"Math"或"Eng"的变量,同时保留所有数值型变量,可通过dplyr的select()结合where()函数实现,修正后的完整代码如下:
library(tidyverse) dat1 <- tibble( var1 = c("Math", "Kisw", "Computer", "Biology"), var2 = c("Science", "Geog", "Studies", "Math"), var3 = c("Kisw", "Math", "Phys", "Psychology"), var4 = rnorm(4, 80, 5), var5 = c("Yes", "No", "Yes", "No"), var6 = c("No", "Yes", "No", "No"), var7 = rnorm(4, 80, 5), var8 = rnorm(4, 80, 5), ) # 执行筛选 dat1 %>% select( where(~ any(.x %in% c("Math", "Eng"))), where(is.numeric) )
代码说明
where(~ any(.x %in% c("Math", "Eng"))):判断每一列是否存在"Math"或"Eng"值,保留符合条件的列where(is.numeric):直接保留所有数值类型的列- 两个
where()条件用逗号分隔,select()会自动合并两类符合条件的列返回
输出结果
运行后会得到包含var1、var2、var3(含"Math"值)以及var4、var7、var8(数值型)的数据集,自动排除var5、var6这类不符合条件的列。
内容的提问来源于stack exchange,提问作者Moses
相关产品推荐
相关产品推荐

