【问题标题】:subset of dataframe in R using a predefined list of namesR中使用预定义名称列表的数据框子集
【发布时间】:2020-11-17 21:24:48
【问题描述】:

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

我想提取 COMBO_mk_plt_genes_labels 的名称。

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

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

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

【问题讨论】:

    标签: r dataframe subset matching


    【解决方案1】:

    你可以使用基础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 in 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)有重复项与第二个项目序列yintersect(x, y) 中的项目匹配的不会为您提供任何重复项。相比之下,x[which(x %in% y)](即which() 方法)将为您提供重复的x,其中x 中的y 匹配为TRUE。切换xy,您也可以使用y[which(y %in% x)] 获得重复的y 名称。您可以使用它来计算匹配的次数。

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 2016-07-20
      • 2016-07-10
      • 2018-11-18
      • 2020-11-21
      • 1970-01-01
      • 2019-12-30
      • 2021-12-16
      • 2018-12-21
      相关资源
      最近更新 更多