gpt4 book ai didi

r - 搜索行查找 2 个条件 (OR)

转载 作者:行者123 更新时间:2023-12-02 18:03:57 24 4
gpt4 key购买 nike

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

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

  • 第 1 次和第 3 次出现 > 0

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

For Id_01: never occurs (NA?)

For Id_02: 1st position (X01)

For Id_03: 3rd position (X03)

For Id_04: 1st position (X01)

For Id_05: never occurs (NA?)

For Id_06: 2nd position (X02)

提前致谢!

最佳答案

我们可以使用dplyr中的laglead

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]

关于r - 搜索行查找 2 个条件 (OR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52653347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com