如何在R中根据数据框首行值筛选保留指定列?
R语言按数据框首行值筛选列的最优方法
需求明确:从数据框DF1中保留ID、Location列,同时筛选出首行值≥1或≤-1.2的其他列。
先确认原始数据构造代码:
ID <- c("First", "Second", "Second", "Third", "Third", "Fourth") Location <- c("Park", "School", "Home", "Car", "Lake", "Prison") XPL <- c(-0.5,2,4,1,7,4) SNA <- c(0.7,5,5,8,5,5) AAS <- c(1.1,2,6,8,4,1) APA <- c(-1.2,3,4,5,6,7) DF1 <- data.frame(ID, Location, XPL, SNA, AAS,APA)
方法一:基础R原生实现
无需额外依赖包,直接用R原生语法完成筛选:
# 提取首行的数值列(排除前两列非数值列) first_row_vals <- unlist(DF1[1, -c(1,2)]) # 筛选符合条件的列名 target_cols <- names(first_row_vals)[first_row_vals >= 1 | first_row_vals <= -1.2] # 组合保留列并生成目标数据框 DF_target <- DF1[, c("ID", "Location", target_cols)]
方法二:dplyr包简洁实现
如果习惯tidyverse生态,用dplyr的select函数能更直观完成操作:
library(dplyr) DF_target <- DF1 %>% select( ID, Location, # 对每一列判断首行值是否符合条件 where(~ first(.) >= 1 | first(.) <= -1.2) )
first(.)会提取每一列的第一个元素,where()函数自动筛选满足条件的列,代码更简洁易读。
两种方法最终都会得到保留ID、Location、AAS、APA列的目标数据框,完全匹配需求。
内容的提问来源于stack exchange,提问作者dkcongo
相关产品推荐
相关产品推荐

