在 R- 中,对于所有为 TRUE 的值,同一行的前一列是否也为 TRUE?

in R- for all values that are TRUE, is the same row, previous column also TRUE?

已编辑:

在 R 中。我正在尝试生成一个充满逻辑的数据框,它告诉我对于所有为 TRUE 的值,前一列中的同一行是否也为 TRUE。这些列代表时间点,我想知道对于任何为真的行,它是该行的第一个实例吗?注意-我只需要它看一个时间点(列)。如果它在三列之前是真的,但不是在最后一列,它仍然被认为是一个新实例。

示例数据框:

T1<- c(TRUE, TRUE, FALSE)
T2<- c(FALSE, TRUE, FALSE) 
T3<- c(TRUE, FALSE, TRUE)
df<- data.frame(cbind(T1,T2,T3)) 
df

看起来像:

     T1    T2    T3
1  TRUE FALSE  TRUE
2  TRUE  TRUE FALSE
3 FALSE FALSE  TRUE

因为我问的是上一列,所以需要在开头添加一个空列

df_w_null<-cbind("null_col"= logical(nrow(df)), df)
df_w_null

看起来像:

  null_col    T1    T2    T3
1    FALSE  TRUE FALSE  TRUE
2    FALSE  TRUE  TRUE FALSE
3    FALSE FALSE FALSE  TRUE

对于每一行,如果是 TRUE,它是第一个 TRUE 实例吗? (上一列是否为真?如果是,则不是新实例,打印false)

for (i in 2:ncol(df_w_null)){
  status[i]<- as.data.frame(apply((!df_w_null[,i, drop=FALSE] == df_w_null[,i-1, drop=FALSE]), 1, isTRUE))
  status<- data.frame(status)
  return(status)
}

看起来像:

status[,2:ncol(df_w_null)]


1                 TRUE                  TRUE                TRUE
2                 TRUE                 FALSE                TRUE
3                FALSE                 FALSE                TRUE
#expected result:
1                 TRUE                 FALSE                TRUE
2                 TRUE                 FALSE                FALSE
3                FALSE                 FALSE                TRUE

这是一个数据框,所有值都在第一列FALSE

df1 <- cbind(FALSE, df)

每当 i 列不为 TRUE(我们对最后一列不感兴趣,因此 !df1[, -ncol(df1)])并且 i + 1 列为 TRUE 时,您需要一个 TRUE 值(我们对第一列不感兴趣,所以 df1[, -1])。我们有

> (!df1[, -ncol(df1)]) & (df1[, -1])
        T1    T2    T3
[1,]  TRUE FALSE  TRUE
[2,]  TRUE FALSE FALSE
[3,] FALSE FALSE  TRUE

这里有很多小步骤。首先,data.frame 被拆分为成对的列,然后检查这些成对的列以查看它们是否满足 FALSE 的要求,然后 TRUE 然后重新组合结果逻辑向量进入决赛 data.frame.

as.data.frame(do.call(cbind, lapply(setNames(lapply(2:ncol(df_w_null), function(x) data.frame(df_w_null[x-1], df_w_null[x])), names(df_w_null)[-1]), 
       function(x) ifelse(x[,1] == F & x[,2] == T, T, F))))
     T1    T2    T3
1  TRUE FALSE  TRUE
2  TRUE FALSE FALSE
3 FALSE FALSE  TRUE