首页 > 解决方案 > R中使用预定义名称列表的数据框子集

问题描述

我有一个名为“COMBO_mk_plt_genes_labels”的基因名称列表和一个名为“Marker_genes_41POS_12_libraries_test_1”的标记基因数据框,其中包含基因和折叠变化。

我想提取 COMBO_mk_plt_genes_labels 的名称。

我知道which()R 中的函数会得到基因的位置。请参阅下面的示例。如何提取名称而不仅仅是位置?

print(head(Marker_genes_41POS_12_libraries_test_1))

p_val avg_logFC pct.1 pct.2 p_val_adj

HBD 6.610971e-108 3.3357135 0.930 0.080 2.419682e-103

GP1BB 1.332211e-91 2.5397301 0.825 0.047 4.876024e-87

CMTM5 1.938091e-63 2.0580724 0.605 0.005 7.093606e-59

SH3BGRL3 1.067771e-60 1.3750032 0.975 0.592 3.908149e-56

PF4 1.899932e-60 3.0111590 0.371 0.000 6.953941e-56

FTH1 4.242081e-58 0.8947325 0.996 0.905 1.552644e-53

COMBO_mk_plt_genes=read.csv(file = "combined_Mk_Plt_genes_list.csv", row.names = ,1)

COMBO_mk_plt_genes_labels=COMBO_mk_plt_genes[,1]

print(head(COMBO_mk_plt_genes_labels))

[1]“CMTM5”“GP9”“CLEC1B”“LTBP1”“C12orf39”“CAMK1”

PLT_genes_in_dataframe= which(rownames(Marker_genes_41POS_12_libraries_test_1) %in% COMBO_mk_plt_genes_labels)

print(PLT_genes_in_dataframe)

[1] 2 3 5 8 11 12 13 20 22 23 24 27 32 38 39 42

[17] 48 60 61 66 68 75 77 92 93 108 112 145 158 175 188 196

[33] 203 214 236 253 261 307 308 1004 1017

我想要元素的名称而不是位置。任何建议表示赞赏。

标签: rdataframesubsetmatching

解决方案


您可以使用基础intersect()

intersect(rownames(Marker_genes_41POS_12_libraries_test_1), COMBO_mk_plt_genes_labels)

intersect()输出在两个项目序列之间匹配的项目。
运行?intersect()?base::intersect()了解更多信息。

替代解决方案:使用您的which()方法获取元素名称

您仍然可以使用which()来查找项目或元素名称。知道你的which()函数提供了rownames(Marker_genes_41POS_12_libraries_test_1)匹配COMBO_mk_plt_genes_labels rownames(Marker_genes_41POS_12_libraries_test_1)索引号,你可以使用这些索引号来调用rownames(Marker_genes_41POS_12_libraries_test_1)匹配的元素名称。

rownames(Marker_genes_41POS_12_libraries_test_1)[which(rownames(Marker_genes_41POS_12_libraries_test_1) %in% COMBO_mk_plt_genes_labels)]

# or in short

rownames(Marker_genes_41POS_12_libraries_test_1)[PLT_genes_in_dataframe]

intersect()不过,这是一种更简单的方法。

但是,您需要注意一个区别,那就是重复项目。
如果 rownames(...) (我们称之为x)具有与第二个 items 序列中的项目匹配的重复项yintersect(x, y)则不会为您提供任何重复项。相比之下,x[which(x %in% y)](即which()方法)将为您提供与inx匹配为 TRUE 的重复项。切换and ,您也可以使用. 您可以使用它来计算匹配的次数。yxxyyy[which(y %in% x)]


推荐阅读