如何根据分组 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
我有一个数据框 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