在 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
已编辑:
在 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