数组操作和按名称提取数据

万贝尔

我需要操纵我的数组。我有一个res包含所有结果的数组调用请参见输入下方。

    RT   Max    blk24  blk23    mat23   sm23    sm24
1   1.6  261    13     19       19      27      20
2   1.6  284    NA     53       5       99      91
3   1.7  304    NA     NA       NA      81      NA
4   1.8  305    32     28       28      39      33
5   1.9  322    8      NA       NA      36      39
6   1.9  349    NA     NA       NA      24      17
7   2    389    1       3       NA      50      NA
8   2.1  393    80      70      7       12      71
9   2.1  622    NA      NA      15      97      96
10  2.2  705    NA      NA      NA      NA      32

我想根据列名这是来提取我的数据blk,并sm和价值的标准本身。

因为blk我建议这样做:

whereblk<- grep("^Blk", colnames(res))

for (i in 1:length(res)){
    tmp.res<-res[which(res[whereblk]>0),]
}

我得到一个输出,给我所有的RTMax值时blk>0

那么我想从sm列中提取值我想smblk=NA提取mat=NA

你有什么线索吗?

我想要的输出是:

    RT  Max         sm23    sm24
1   
2   
3   1.7 304         81      NA
4   
5   
6   1.9 349         24      17
7   
8   
9   
10  2.2 705         NA      32

要使用excel进行操作,可以使用以下公式= IF(COUNTIF(blk:blk,“> 0”),“-”,sm)。excel的问题是,例如blk更改时,我将无法自动使用它

此处的困难是使用根据其名称定位列位置的公式。并根据两个标准提取值,这是我仍然不掌握的东西。

如果您有任何建议,欢迎您。

事物

这是dplyr解决方案。

我相当确定@thelatemail提供了一个仅在注释部分使用base R即可使用的解决方案。

library(dplyr)

df <- read.table(text = "RT   Max    blk24  blk23    mat23   sm23    sm24
    1   1.6  261    13     19       19      27      20
    2   1.6  284    NA     53       5       99      91
    3   1.7  304    NA     NA       NA      81      NA
    4   1.8  305    32     28       28      39      33
    5   1.9  322    8      NA       NA      36      39
    6   1.9  349    NA     NA       NA      24      17
    7   2    389    1       3       NA      50      NA
    8   2.1  393    80      70      7       12      71
    9   2.1  622    NA      NA      15      97      96
    10  2.2  705    NA      NA      NA      NA      32", header = T)

nams <- df %>% select(matches('blk|mat')) 
df <- df[apply(nams, 1, function(i) all(is.na(i)))==TRUE,]

df

    RT Max blk24 blk23 mat23 sm23 sm24
3  1.7 304    NA    NA    NA   81   NA
6  1.9 349    NA    NA    NA   24   17
10 2.2 705    NA    NA    NA   NA   32

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章