我需要操纵我的数组。我有一个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),]
}
我得到一个输出,给我所有的RT
和Max
值时blk>0
。
那么我想从sm
列中提取值。我想sm
在blk=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] 删除。
我来说两句