【问题标题】:How to select values in a matrix by a condition如何按条件选择矩阵中的值
【发布时间】:2015-09-24 05:18:10
【问题描述】:

我有一个算法,我正在尝试在 R 中实现它:

object :matrix(V)
if V[1,1] > 1 then select row.name[1,1] else
if V[1,2] > 1 then select ...

我试过这样写,但效果不好。

    v
              Comp 1    Comp 2
Coliformes 2.34387737 1.7070448
DBO        0.03067654 0.6291745
OD         0.13726407 0.1972502
NO3        0.07250923 0.8988905
NO2        0.97224048 0.9616424
NH4        1.61238684 1.6422081
PO4        0.36423502 0.3688056
pH         0.98055981 1.0106563
Temp       0.10056242 0.2551496
Turb       0.76414630 0.5732596
PT         0.49795469 1.2924590

f<-subset(v>1) 

> f
           Comp 1 Comp 2
Coliformes   TRUE   TRUE
DBO         FALSE  FALSE
OD          FALSE  FALSE
NO3         FALSE  FALSE
NO2         FALSE  FALSE
NH4          TRUE   TRUE
PO4         FALSE  FALSE
pH          FALSE   TRUE
Temp        FALSE  FALSE
Turb        FALSE  FALSE
PT          FALSE   TRUE

也许我的问题很容易解决,但我对 R 没有经验。

【问题讨论】:

  • 您可以查看输出f,有一行带有一个TRUE。你想保留这些行吗?如果您只需要提取 TRUE 值,则在每一列中,list 中的输出会更好
  • 我不清楚你在追求什么,但也许subset(v, Comp1 &gt; 1 | Comp2 &gt; 1) (假设你更改了名称“Comp 1”和“Comp 2”以删除空格,这只是一个麻烦) .
  • @Frank 如果你没有删除空格,subset(v, `Comp 1` &gt; 1 | `Comp 2` &gt; 1)
  • 现在,我有一个带有“0”而不是数字1的行的行名,该值并不重要现在,我只想要一种自动方式来保留行名(大肠菌群、DBO、pH 等)

标签: r if-statement subset


【解决方案1】:

怎么样

v[v > 1]

或者

f <- ifelse(v > 1, v, 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多