首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R通过外部向量作为索引选择数据帧中的行

R通过外部向量作为索引选择数据帧中的行
EN

Stack Overflow用户
提问于 2021-05-05 23:34:10
回答 3查看 49关注 0票数 0

我有以下数据,如果名称在向量l中,我想对表中的一些行进行子集。

代码语言:javascript
复制
df <-data.frame("Names" = c("TIGIT", "ABCB1", "CD8B", "CD8A", "CD1C", "F2RL1", "LCP1",  "LAG3", "ABL1", "CD2", "IL12A", "PSEN2", "CD3G", "CD28", "PSEN1", "ITGA1"),"1S" = c("5", "6", "8", "99", "5", "0", "1",  "3", "15", "15", "34", "62", "54", "6", "8", "9"), "1T" = c("6", "4", "6", "9", "5", "11", "33",  "7", "8", "24", "34", "62", "66", "4", "78", "44"))
rownames(df) <- df$Names
df <- df %>% select(-"Names") # df I have

l <- c("TIGIT", "CD8B", "CD8A", "CD1C", "F2RL1", "LCP1",  "LAG3", "CD2", "PSEN2", "CD3G", "CD28", "PSEN1") # genes I want to select

我希望在输出中获得以下表格。

代码语言:javascript
复制
  X1S X1T
TIGIT   5   6
CD8B    8   6
CD8A   99   9
CD1C    5   5
F2RL1   0  11
LCP1    1  33
LAG3    3   7
CD2    15  24
PSEN2  62  62
CD3G   54  66
CD28    6   4
PSEN1   8  78
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-05 23:44:57

如果您将基因名称保留为一列,而不是将其设置为rownames,则根据基因名称进行过滤会更容易。

对您的代码进行以下更改将得到您要查找的结果。

代码语言:javascript
复制
library(tidyverse)

df <-data.frame("Names" = c("TIGIT", "ABCB1", "CD8B", "CD8A", "CD1C", "F2RL1", "LCP1",  "LAG3", "ABL1", "CD2", "IL12A", "PSEN2", "CD3G", "CD28", "PSEN1", "ITGA1"),"1S" = c("5", "6", "8", "99", "5", "0", "1",  "3", "15", "15", "34", "62", "54", "6", "8", "9"), "1T" = c("6", "4", "6", "9", "5", "11", "33",  "7", "8", "24", "34", "62", "66", "4", "78", "44"))

genes_to_select <- c("TIGIT", "CD8B", "CD8A", "CD1C", "F2RL1", "LCP1",  "LAG3", "CD2", "PSEN2", "CD3G", "CD28", "PSEN1") # genes I want to select

df <- 
  df %>% 
  filter(Names %in% genes_to_select) %>% 
  column_to_rownames("Names") %>% 
  mutate(across(.fns = as.numeric)) %>% 
  as.matrix()

df
#>       X1S X1T
#>  [1,]   5   6
#>  [2,]   8   6
#>  [3,]  99   9
#>  [4,]   5   5
#>  [5,]   0  11
#>  [6,]   1  33
#>  [7,]   3   7
#>  [8,]  15  24
#>  [9,]  62  62
#> [10,]  54  66
#> [11,]   6   4
#> [12,]   8  78
票数 1
EN

Stack Overflow用户

发布于 2021-05-06 00:04:06

我们也可以使用slice

代码语言:javascript
复制
library(dplyr)
library(tibble)
df %>%
    slice(match(Names, l)) %>%
    column_to_rownames('Names')
票数 1
EN

Stack Overflow用户

发布于 2021-05-06 01:20:53

只有一行代码就可以完成这项工作:

代码语言:javascript
复制
df[rownames(df) %in% l,]

      X1S X1T
TIGIT   5   6
CD8B    8   6
CD8A   99   9
CD1C    5   5
F2RL1   0  11
LCP1    1  33
LAG3    3   7
CD2    15  24
PSEN2  62  62
CD3G   54  66
CD28    6   4
PSEN1   8  78

或者如果你有Names

代码语言:javascript
复制
df[df$Names %in% l,]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67404385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档