gpt4 book ai didi

r - 如何查找 data.frame 行子集中的所有元素是否为 TRUE

转载 作者:行者123 更新时间:2023-12-04 11:36:10 26 4
gpt4 key购买 nike

我有一个带有逻辑列块的 data.frame,例如

> tmp <- data.frame(a=c(13, 23, 52),
+ b=c(TRUE,FALSE,TRUE),
+ c=c(TRUE,TRUE,FALSE),
+ d=c(TRUE,TRUE,TRUE))
> tmp
a b c d
1 13 TRUE TRUE TRUE
2 23 FALSE TRUE TRUE
3 52 TRUE FALSE TRUE

我想计算一个汇总列(比如:e),它是一个逻辑 AND在整个逻辑列范围内。换句话说,对于给定的行,如果所有 b:d 都是 TRUE ,那么 e 将是 TRUE ;如果有 b:d 是 FALSE ,那么 e 将是 FALSE .

我的预期结果是:
> tmp
a b c d e
1 13 TRUE TRUE TRUE TRUE
2 23 FALSE TRUE TRUE FALSE
3 52 TRUE FALSE TRUE FALSE

我想通过索引指示列的范围,因为我有一堆列,而且名称很麻烦。以下代码有效,但我宁愿使用矢量化方法来提高性能。
> tmp$e <- NA
> for(i in 1:nrow(tmp)){
+ tmp[i,"e"] <- all(tmp[i,2:(ncol(tmp)-1)]==TRUE)
+ }
> tmp
a b c d e
1 13 TRUE TRUE TRUE TRUE
2 23 FALSE TRUE TRUE FALSE
3 52 TRUE FALSE TRUE FALSE

不使用 for 的任何方法循环遍历 data.frame 的行?

最佳答案

您可以使用 rowSums在行上循环......以及一些奇特的步法以使其准自动化:

# identify the logical columns
boolCols <- sapply(tmp, is.logical)
# sum each row of the logical columns and
# compare to the total number of logical columns
tmp$e <- rowSums(tmp[,boolCols]) == sum(boolCols)

关于r - 如何查找 data.frame 行子集中的所有元素是否为 TRUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11403919/

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