如何根据分组 data.frame 中另一列中的 any() 填充一列?

How to populate a column based on any() in another column in a grouped data.frame?

我有一个数据框 jj:

jj<-data.frame(a=rep(1:3,3),b=c(TRUE,rep(FALSE,4),TRUE,TRUE,FALSE,TRUE))

我想创建第三列,如果具有特定 a 的任何行的 b==TRUE 为真。所以我尝试了这个:

group_by(jj,a) %>% mutate(c=any(isTRUE(b)))

但是我得到的结果是这样的:

# A tibble: 9 x 3
# Groups:   a [3]
      a b     c    
  <int> <lgl> <lgl>
1     1 TRUE  FALSE
2     2 FALSE FALSE
3     3 FALSE FALSE
4     1 FALSE FALSE
5     2 FALSE FALSE
6     3 TRUE  FALSE
7     1 TRUE  FALSE
8     2 FALSE FALSE
9     3 TRUE  FALSE

我的预期结果应该是这样的:

# A tibble: 9 x 3
# Groups:   a [3]
      a b     c    
  <int> <lgl> <lgl>
1     1 TRUE  TRUE
2     2 FALSE FALSE
3     3 FALSE TRUE
4     1 FALSE TRUE
5     2 FALSE FALSE
6     3 TRUE  TRUE
7     1 TRUE  TRUE
8     2 FALSE FALSE
9     3 TRUE  TRUE

我什至不明白为什么我得到的都是假的——如果它们都是真的话,我会认为 any() 出于某种原因得到了完整的专栏。我错过了什么,我怎样才能达到预期的结果?

我们需要在逻辑列上应用 any 而不是 isTRUE

jj %>% 
  group_by(a) %>%
  mutate(c = any(b))
# A tibble: 9 x 3
# Groups:   a [3]
#      a b     c    
#  <int> <lgl> <lgl>
#1     1 TRUE  TRUE 
#2     2 FALSE FALSE
#3     3 FALSE TRUE 
#4     1 FALSE TRUE 
#5     2 FALSE FALSE
#6     3 TRUE  TRUE 
#7     1 TRUE  TRUE 
#8     2 FALSE FALSE
#9     3 TRUE  TRUE 

原因是isTRUE是另外(来自?isTRUE

is.logical(x) && length(x) == 1 && !is.na(x) && x 

&&rhs 表达式只有在表达式 lhs 全部为真时才会被计算

这里length(x)等于1是不正确的,所以returnsFALSE