2016-07-26 68 views
0

我需要操作我的数组。 我有一个数组调用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列的值。我想在blk=NAmat=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列更改的数目,我无法自动使用它。

这里的困难是使用根据其名称对列位置进行本地化的公式。并根据两个标准提取值,这是我还没掌握的东西。

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

+0

添加'dput的输出(res)',以便其他人可以重新创建数组。查看命令“subset”。 – TomNash

+0

确实很难说清,但'nams < - grepl(“blk | mat”,名称(res)); res [rowSums(is.na(res [nams]))== sum(nams),]'do it? – thelatemail

回答

1

这是一个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 
2

这里是一个base R选项与Reducelapply(假设是,我们有一个data.frame或者转换为data.frameas.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 
+1

谢谢我要做一些关于Reduce功能的文档。 – Vanbell