我需要操作我的数组。 我有一个数组调用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
列的值。我想在blk=NA
和mat=NA
时提取sm
值。
你有什么线索吗?
我的期望的输出是:
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
列更改的数目,我无法自动使用它。
这里的困难是使用根据其名称对列位置进行本地化的公式。并根据两个标准提取值,这是我还没掌握的东西。
如果您有任何建议,非常欢迎。
添加'dput的输出(res)',以便其他人可以重新创建数组。查看命令“subset”。 – TomNash
确实很难说清,但'nams < - grepl(“blk | mat”,名称(res)); res [rowSums(is.na(res [nams]))== sum(nams),]'do it? – thelatemail