如何操作R语言dataframe以保留与行RS_number值匹配的列
R DataFrame 筛选行列共有rsID的实现方法
核心逻辑是先提取RS_number列取值与DataFrame列名的共同rsID集合,再按该集合同步筛选行和列,即可得到目标维度的方阵。
实现代码
方法1:tidyverse 管道写法
library(dplyr) # 提取列名和RS_number列的共同rsID common_rs <- intersect(newdf$RS_number, colnames(newdf)) # 筛选行+筛选列,得到带RS_number列的结果 result <- newdf %>% filter(RS_number %in% common_rs) %>% select(RS_number, all_of(common_rs)) # 若需要纯数值方阵,可将RS_number设为行名后删除该列 result <- result %>% tibble::column_to_rownames("RS_number")
方法2:base R 写法
# 提取共同rsID common_rs <- intersect(newdf$RS_number, colnames(newdf)) # 先筛选符合条件的行 result <- newdf[newdf$RS_number %in% common_rs, ] # 再筛选符合条件的列 result <- result[, c("RS_number", common_rs)] # 转换为纯数值方阵 rownames(result) <- result$RS_number result <- result[, -1]
效果说明
针对你提供的示例数据,运行后得到的共同rsID为rs1/rs2/rs3/rs4,最终输出4×4的方阵,完全符合你要排除rs5/rs9/rs10的筛选要求,适配你76×76的输出需求。
内容的提问来源于stack exchange,提问作者Noahp555
相关产品推荐
相关产品推荐

