在R语言中基于多条件从mtcars数据集提取行名
解决mtcars数据集多条件提取行名的问题
首先纠正下你原来的单条件代码:which(mtcars[mtcars$cyl==4,])没法正确获取行名,它返回的是筛选后数据框里非NA值的列索引(which作用在数据框上会按列遍历返回位置),正确的单条件提取行名应该用rownames()或row.names()直接取筛选后的行名。
针对多条件(cyl4 或 cyl6)的需求,有两种简洁的实现方式:
方法1:使用逻辑或运算符|
直接把两个条件用|连接,筛选出符合条件的行后提取行名:
rowname_vec <- rownames(mtcars[mtcars$cyl == 4 | mtcars$cyl == 6, ])
方法2:使用%in%运算符(推荐)
当需要匹配的条件值较多时,%in%更简洁易读,代码如下:
rowname_vec <- rownames(mtcars[mtcars$cyl %in% c(4, 6), ])
可选:用dplyr包实现(tidyverse风格)
如果你习惯用tidyverse系列工具,也可以用dplyr的filter()函数:
library(dplyr) rowname_vec <- mtcars %>% filter(cyl %in% c(4, 6)) %>% rownames()
运行以上任意一段代码后,rowname_vec就是你需要的包含符合条件行名的向量。
内容的提问来源于stack exchange,提问作者M3Lba
相关产品推荐
相关产品推荐

