【问题标题】:how to select values greater than x in a table row如何在表格行中选择大于 x 的值
【发布时间】:2012-08-21 18:16:54
【问题描述】:

我是 R 的新手,我正在努力学习这门语言。我一直在研究 Bioconductor 的 multtest 包中包含的 Golub (1999) 数据。

以 Golub 数据为例,我试图在“ALL”患者(由第 1 至 27 列表示;“AML”患者由第 28 至 38 列表示)。这就是我所做的:

library(multtest); data(golub)
gol.fac <- factor(golub.cl,levels=0:1, labels= c("ALL","AML"))
x <- golub[1042, gol.fac=="ALL"] > 2.4
golub [1042, x]

我得到的结果是:

[1] 2.44562 2.76610 2.59385 1.12058

为什么会得到值“1.12058”?我发现“1.12058”是第 1042 行中属于 AML 患者的最后一个(第 38 列)表达式值。

有人能告诉我做我想做的事情的正确方法吗?并解释一下为什么我得到了 AML 患者的价值?

【问题讨论】:

    标签: r


    【解决方案1】:

    @seancarmody 给了你一个完美的答案,但我发现他使用的范式不太可读(这纯粹是主观的)。这是我尝试展示一种稍微不同的方式。

    golub[1042, which(golub[1042, gol.fac == "ALL"] > 2.4)]
    

    从内到外阅读,我们有:

    • 选择gol.fac == "ALL"的第1042行和列
    • 查找大于 2.4 的值的位置(which() 部分)
    • 子集golub的第1042行并取出值大于2.4的列(最外层[]

    【讨论】:

    • 不,你不需要它。这两种范式是等价的(哪些子集基于索引,而非哪个方法基于 T/F 选择)。
    • 您好 Roman,感谢您的回答。我后来确实使用了 which() 并且它起作用了......我做了一点不同,它不像你的解决方案那么简洁,但总体思路就在那里。但是,我仍然不知道为什么我原来的方法不起作用....特别是如果你说我不需要你 which()。如果我写的话,让我做对吧
    • 如果我写了 golub[1042, golub[1042, gol.fac=="ALL"]>2.4] 而没有使用 which(),它也可以工作吗?如果是这样的话,那么它基本上与我最初所做的相同。唯一的区别是我将 golub[1042, gol.fac == "ALL"] > 2.4 分配给 x,然后要求打印 golub[1042,x] 的结果。我试过 golub[1042, golub[1042, gol.fac=="ALL"]>2.4] 但它​​不起作用。除了正确的值“2.44562 2.76610 2.59385”之外,它仍然给我值“1.12058”。正如我所说,值“1.12058”属于AML患者中的最后一个表达值。
    • 抱歉,我必须拆分我的 cmets,但有字符限制。我希望你能解释为什么当我不使用 which() 时会得到这个有趣的结果。谢谢!
    • 感谢您回复 Roman,但 Sean 的最新回复解释了为什么我得到最后一个值“1.12058”...x 正在被回收。现在说得通了。
    【解决方案2】:

    您的向量x 将是一系列TRUEFALSE 值,指示在golub[1042, gol.fac=="ALL"] 中值大于2.4 的位置,但随后您使用它来索引x &lt;- golub[1042, ](即跨越两个因素不只是AML

    试试这个:

    golub[1042, gol.fac=="ALL"][x]
    

    【讨论】:

    • 嗨,肖恩,感谢您的回答。我尝试了它并且它有效,但是当我尝试学习 R 时,我想知道你是否可以更详细地解释你的答案的语法。 [x] 是什么意思?您说“您的向量 x 将是一系列 TRUE 和 FALSE 值,指示在 golub[1042, gol.fac=="ALL"] 中值大于 2.4 的位置”......我知道并理解这一点。然而,你接着说:“但是你用它来索引 x
    • 当您使用gol.fac=="ALL" 时,您将限制为ALL 列(我相信您有27 个),因此x 将只有27 个值。当您编写golub [1042, x] 时,您将x 插入整行,相当于golub [1042, ][x],并且由于x 只有27 个值,它将被回收以扩展到所有列,从@ 中选择一些值987654335@ 列。 golub[1042, gol.fac=="ALL"] 将限制为 AML 列,golub[1042, gol.fac=="ALL"][x] 将拉出 xTRUE 的列。
    • 非常感谢您的解释,肖恩……现在一切都说得通了。
    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-06
    • 2022-08-04
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多