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, 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:

For Id_01: never occurs (NA?)

For Id_02: 1st position (X01)

For Id_03: 5th position (X05)

For Id_04: 1st position (X01)

For Id_05: never occurs (NA?)

For Id_06: 2nd position (X02)

我正在尝试查找该位置的位置编号或变量名称。


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

  1. 第一次和第二次出现(连续)> 0 OR

  2. 第 1 次和第 3 次出现 > 0

考虑到这一变化,之前发布的表格的评估输出应该是:

For Id_01: never occurs (NA?)

For Id_02: 1st position (X01)

For Id_03: 3rd position (X03) - not X05

For Id_04: 1st position (X01)

For Id_05: never occurs (NA?)

For Id_06: 2nd position (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"

关于r - 根据条件每行中第一次出现的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52630531/

相关文章:

r - 显示两个或多个对象之间差异的功能

javascript - 为 Shiny 应用程序添加 'Calculation In Process' 指示器

r - 查找一系列 `n` TRUE 中第一个 TRUE 的位置

sql - 如何使用自连接更快地进行查询?

r - 使用 R 代码精确列出给定包导入的包?

python - 具有可变宽度元素的堆​​积条形图?

基于多个条件的排名

r - 提取两个字符串之间不同的字符

r - 合并多个geom_rect()有什么问题?

r - 以矩阵形式计算我的投资组合中股票之间的 beta