Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据情况,每行第一次出现的位置_R - Fatal编程技术网

R 根据情况,每行第一次出现的位置

R 根据情况,每行第一次出现的位置,r,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

我有下表,带有有序变量:

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
表0:

对于Id_01:从未发生(NA?)

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

对于Id_03:5位置(X05)

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

对于Id_05:从未发生(NA?)

对于Id_06:第二位置(X02)

我试图找到位置号或该位置的变量名


编辑: 我希望在下面发布的
apply
解决方案中添加第二个条件,因此需要满足以下条件:

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

  • 第一和第三眼波>0

  • 考虑到这一变化,之前公布的表格的评估结果应为:

    对于Id_01:从未发生(NA?)

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

    对于Id_03:第三位置(X03)-非X05

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

    对于Id_05:从未发生(NA?)

    对于Id_06:第二位置(X02)


    谢谢

    我们可以使用
    apply
    在行中循环,创建一个逻辑表达式来检查数字是否大于0或是否为NA('i1')。然后,通过删除第一个和最后一个元素来比较相邻的两个元素,即检查两个TRUE,并使用
    which
    获得索引。使用它来获取列名

    apply(table[-1], 1, function(x) {
        i1 <- x > 0 & !is.na(x)
        names(x)[which(i1[-1] & i1[-length(i1)])[1]]})
    #[1] NA    "X01" "X05" "X01" NA    "X02"
    
    apply(表[-1],1,函数(x){
    i10&!is.na(x)
    名称(x)[其中(i1[-1]和i1[-length(i1)])[1]})
    #[1] NA“X01”“X05”“X01”NA“X02”
    
    该位置变量名的一种方式:

    library(magrittr)
    apply(!is.na(table[-1]) & table[-1] > 0, 1, 
          function(x) ave(x, cumsum(x == 0), FUN = cumsum)) %>%
      apply(2, function(x) names(table)[which(x == 2)[1]])
    
    [1] NA    "X01" "X05" "X01" NA    "X02"
    
    或指数:

    apply(!is.na(table[-1]) & table[-1] > 0, 1, 
          function(x) ave(x, cumsum(x == 0), FUN = cumsum)) %>%
      apply(2, function(x) which(x == 2)[1] - 1L)
    
    [1] NA  1  5  1 NA  2
    

    花了一些时间来获得连续两人的逻辑,太棒了@akrun我正在尝试向应用公式添加第二个条件(第一个和第三个数字>0),我假设这是通过修改WHERY语句的[-1]值完成的,但它不起作用:
    names(x)[which(i1[-1]&i1[-length(i1)]| i1[-2]&i1[-length(i1)])[1]}
    。我做错了什么?Thx@CristianS. 可能您需要
    if(x[1]>0&x[3]>0)i10&!is.na(x)
    ?@akrun给了我一个错误,我想这是因为在i1之前定义了if语句。我正在考虑在代码末尾的which语句中添加第二个条件(使用|)。最后,重点是使用相同的应用程序计算第一个和第二个值,或者第一个和第三个值是否大于0。你能不能更新你的问题或作为一个新的问题张贴,因为我不清楚预期的输出