通过R中的组查找布尔值是否为真

通过R中的组查找布尔值是否为真,r,boolean,mlogit,R,Boolean,Mlogit,我想要一种简单的方法来创建一个新变量,确定布尔值在R数据帧中是否为真。 下面是一个示例: 假设在数据集中我有2个变量(在其他不相关的变量中)'a'和'b','a'确定一个组,而'b'是一个布尔值,值为TRUE(1)或FALSE(0)。我想创建一个变量“c”,它也是一个布尔值,对于“b”至少为一次“TRUE”的组中的所有条目为1,对于“b”从不为TRUE的组中的所有条目为0。 从以下条目中: a b ----- 1 1 2 0 1 0 1 0 1 1 2 0 2

我想要一种简单的方法来创建一个新变量,确定布尔值在R数据帧中是否为真。 下面是一个示例: 假设在数据集中我有2个变量(在其他不相关的变量中)'a'和'b','a'确定一个组,而'b'是一个布尔值,值为TRUE(1)或FALSE(0)。我想创建一个变量“c”,它也是一个布尔值,对于“b”至少为一次“TRUE”的组中的所有条目为1,对于“b”从不为TRUE的组中的所有条目为0。 从以下条目中:

a   b
-----
1   1 
2   0
1   0
1   0
1   1
2   0
2   0
3   0
3   1
3   0
a   b   c
-----------
1   1   1 
2   0   0
1   0   1
1   0   1
1   1   1
2   0   0
2   0   0
3   0   1
3   1   1
3   0   1
-----------
我希望得到如下所示的变量“c”:

a   b
-----
1   1 
2   0
1   0
1   0
1   1
2   0
2   0
3   0
3   1
3   0
a   b   c
-----------
1   1   1 
2   0   0
1   0   1
1   0   1
1   1   1
2   0   0
2   0   0
3   0   1
3   1   1
3   0   1
-----------
我知道如何在Stata做,但我还没有在R做过类似的事情,而且很难在互联网上找到这方面的信息。
事实上,我这样做只是为了以后删除所有“c”为0的观察值,所以任何其他建议都可以。它的应用与多项式logit估计有关,在这种情况下,在估计之前,从未选择的备选方案需要从数据集中删除。

如果
X
是您的数据帧

library(dplyr)
X <- X %>%
  group_by(a) %>%
  mutate(c = any(b == 1))
x$c <- cmap[x$a]
库(dplyr)
X%
组别(a)%>%
变异(c=any(b=1))

假设
a
b
在数据帧
x

c
值是与
a
的一对一映射,我在这里创建了一个映射

cmap <- ifelse(sapply(split(x, x$a), function(x) sum(x[, "b"])) > 0, 1, 0)

已编辑以将调用更改为拆分。

基本R选项将是

 df1$c <- with(df1, ave(b, a, FUN=any))

简单数据表法

require(data.table)
data <- data.table(data)
data[, c := any(b), by = a]
require(data.table)

数据为什么在
b
上出现双重否定?@Andreas谢谢你的评论,在这种情况下它不是真的需要,谢谢,我使用了你的第一个建议,它很有效!通过这个例子,我了解了函数ave(),这对我来说是新的,所以它非常有用!