搜索寻找2个条件的行(或)

时间:2018-10-04 18:50:34

标签: r

我有下表,其中包含有序的变量:

table <- data.frame(Ident = c("Id_01", "Id_02", "Id_03", "Id_04", "Id_05", "Id_06"), 
                    X01 = c(NA, 18, 0, 14, 0, NA), 
                    X02 = c(0, 16, 0, 17, 0, 53), 
                    X03 = c(NA, 15, 20, 30, 0, 72), 
                    X04 = c(0, 17, 0, 19, 0, NA), 
                    X05 = c(NA, 29, 21, 23, 0, 73), 
                    X06 = c(0, 36, 22, 19, 0, 55))

Ident   X01 X02 X03 X04 X05 X06
Id_01   NA  0   NA  0   NA  0
Id_02   18  16  15  17  29  36
Id_03   0   0   20  0   21  22
Id_04   14  17  30  19  23  19
Id_05   0   0   0   0   0   0
Id_06   NA  53  72  NA  73  55

From a previous question, I have the following code provided from a user here,按行搜索一个条件(第一位置和第二位置> 0)并返回出现的位置(特定位置的变量名称):

apply(table[-1], 1, function(x) {
    i1 <- x > 0 & !is.na(x)
    names(x)[which(i1[-1] & i1[-length(i1)])[1]]})

我希望在apply代码中添加第二个条件,因此条件必须为:

  • 第一次和第二次发生(连续)> 0

OR

  • 第一次和第三次发生> 0

考虑到此更改,之前发布的表的评估结果应为:

  

对于Id_01:从不发生(不适用?)

     

对于Id_02:第1个位置(X01)

     

对于Id_03:第3个位置(X03)

     

对于Id_04:第1个位置(X01)

     

对于ID_05:从不发生(不适用?)

     

对于ID_06:第二个位置(X02)

谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以使用lag中的leaddplyr

library(dplyr)
f1 <- function(x) {
    i1 <- x > 0 & !is.na(x)
  which((i1 & lag(i1, default = i1[1])) | 
      (i1 & lead(i1, n = 3, default = i1[1])))[1]
        }
n1 <- apply(table[-1], 1, f1)
names(table)[-1][n1]
#[1] NA    "X01" "X03" "X01" NA    "X02"

或使用pmap

library(purrr)
n1 <- pmap_int(table[-1], ~ c(...) %>% 
                   f1)
names(table)[-1][n1]
相关问题