我需要操纵我的数组。
我有一个数组调用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,&#34;&gt; 0&#34;),&#34; - &#34;,sm )。 excel的问题是,如果blk
列的数量发生变化,我无法自动使用它。
这里的困难是使用根据其名称本地化列位置的公式。并根据我仍然不掌握的两个标准提取值。
如果您有任何建议,欢迎您。
答案 0 :(得分:2)
这是一个base R
选项Reduce
和lapply
(假设我们有一个data.frame
或者data.frame
转换为as.data.frame(m1)
matrix
} - 如果它是nm1 <- grep("blk|mat", names(df), value = TRUE)
df[Reduce(`&`,lapply(df[nm1], is.na)), setdiff(names(df), nm1)]
# RT Max sm23 sm24
#3 1.7 304 81 NA
#6 1.9 349 24 17
#10 2.2 705 NA 32
)
SELECT A, B, C FROM TABLE WHERE STRCMP(D, 'somestring') > 0
答案 1 :(得分:1)
这是一个dplyr解决方案。
我相当确定@thelatemail提供了一个解决方案,可以在评论部分使用基本R。
Renderer