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