【问题标题】:R, how to create a binary relation matrix from a list of strings?R,如何从字符串列表创建二元关系矩阵?
【发布时间】:2019-10-02 23:21:54
【问题描述】:

我有一个包含特定基因的文件列表,我想在 R 中创建一个二元关系矩阵,显示每个文件中每个基因的存在。

例如,这里是我的文件 aaabbbcccddd 以及与它们相关的基因。

aaa=c("HERC1")
bbb=c("MYO9A", "PKHD1L1", "PQLC2", "SLC7A2")
ccc=c("HERC1")
ddd=c("MACC1","PKHD1L1")

我想知道我可以在 R 中使用哪个命令来生成如下图所示的二元关系表:

其中值 1 表示关联,值 0 表示非关联。

如何在 R 中执行此操作?

我尝试使用table(aaa,bbb,ccc,ddd),但它不起作用。 R 说:

表中的错误(aaa,bbb,ccc,ddd):所有参数都必须有 一样长

编辑:感谢@akrun 的有用回复!我会利用这个问题为另一个问题寻求帮助,我相信你们可以很快处理。对于我分析的第二部分,我需要生成另一个表,其中对于每对基因,如果它们都存在于特定文件中,我将其赋值为 1,否则为 0。按照我之前给出的示例,这个新表应该如下所示(为了澄清,我将其转置):

从你们已经提供给我的命令开始,有人知道在 R 中获取这个新的 bigenic 表的快速方法吗?谢谢!

【问题讨论】:

    标签: r matrix contingency


    【解决方案1】:

    是一个选项是在一个名为listmget)中的对象标识符的值,stack 987654323 @它到两个列数据。框架和获取频率table

    table(stack( mget(strrep(letters[1:4], 3)))[2:1])
    #   values
    #ind   HERC1 MACC1 MYO9A PKHD1L1 PQLC2 SLC7A2
    #  aaa     1     0     0       0     0      0
    #  bbb     0     0     1       1     1      1
    #  ccc     1     0     0       0     0      0
    #  ddd     0     1     0       1     0      0
    

    tidyverse

    的选项
    library(tidyverse)
    lst(aaa, bbb, ccc, ddd) %>% 
      enframe %>% 
      unnest %>% 
      count(name, value) %>% 
      spread(value, n, fill = 0)
    # A tibble: 4 x 7
    #  name  HERC1 MACC1 MYO9A PKHD1L1 PQLC2 SLC7A2
    #  <chr> <dbl> <dbl> <dbl>   <dbl> <dbl>  <dbl>
    #1 aaa       1     0     0       0     0      0
    #2 bbb       0     0     1       1     1      1
    #3 ccc       1     0     0       0     0      0
    #4 ddd       0     1     0       1     0      0
    

    在op的代码

    table(aaa,bbb,ccc,ddd)
    

    length 987654330 @ s需要在table上班。另外,如果我们使用超过2个向量,频率表将是多维(> 2D)。因此,我们需要一个框架来拥有table应用于两列而不是多个对象

    【讨论】:

    • 谢谢,非常快!关于table(stack解决方案,如何指定变量aaa, bbb, ccc, ddd?我的请求实际上是一种原型;真正的任务具有数百个变量,名称更复杂。 span>
    • @ davidechicco.it我创建了用strrepletters,或者也可以也可以是mget(c("aaa", "bbb", .)),例如,它创建了字符串标识符。 strrep("a", 3)给出"aaa" span>
    • @ davidechicco.it如果名称中没有模式,如果会话只有来自这些的对象,则使用mget(ls())表示,您将在创建它的同时具有标识符? span>
    • 关闭主题,但只是读取代码,我已经知道谁写了它) span>
    • @ akrun感谢您的帮助;你能帮我解决这个问题的新部分吗? span>
    猜你喜欢
    • 2019-10-05
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多