【发布时间】:2020-01-13 23:37:23
【问题描述】:
在 R 中: 我有一个逻辑数据框,我想知道每一行的所有值为 TRUE 的值,其中所有后续列也是 TRUE,第一个 TRUE 出现在哪一列。
示例数据框:
T1<-c(TRUE, TRUE, TRUE, FALSE)
T2<- c(FALSE, TRUE, TRUE, FALSE)
T3<- c(FALSE, FALSE, TRUE, TRUE)
T4<- c(FALSE, TRUE, TRUE, TRUE)
test_df<- as.data.frame(cbind(T1,T2,T3,T4))
test_df
看起来像:
T1 T2 T3 T4
1 TRUE FALSE FALSE FALSE
2 TRUE TRUE FALSE TRUE
3 TRUE TRUE TRUE TRUE
4 FALSE FALSE TRUE TRUE
由于我也想知道最后一列,所以需要在最后添加一个空列
test_df$null_col<-TRUE
看起来像:
T1 T2 T3 T4 null_col
1 TRUE FALSE FALSE FALSE TRUE
2 TRUE TRUE FALSE TRUE TRUE
3 TRUE TRUE TRUE TRUE TRUE
4 FALSE FALSE TRUE TRUE TRUE
对于每一行,如果为真,并且所有后续列都为真,则返回该行的列名 我该如何处理?我的第一直觉是首先创建第二个逻辑数据框,这样第一个函数只有在所有后续(右侧的列)都为 TRUE 时才返回 TRUE,然后是第二个函数来查找每一行的列值:首先是第二个逻辑数据框
T1 T2 T3 T4
1 FALSE FALSE FALSE FALSE
2 FALSE FALSE FALSE TRUE
3 TRUE TRUE TRUE TRUE
4 FALSE FALSE TRUE TRUE
然后第二个函数为每一行返回一个 col 值,可以是命名列表,也可以是行号完整的数据框:
1 NA
2 T4
3 T1
4 T3
【问题讨论】:
-
为什么第 2 行的预期结果是
NA而不是T4? -
一个疏忽 SymbolixAU!在我的实际答案中不需要,但我认为在这个例子中很有帮助。为了清楚起见,我将进行编辑。