【发布时间】:2019-09-09 13:07:28
【问题描述】:
我有一个数据框,我想为每一行生成一个变量,告诉它某个变量子集的所有元素是否等于给定元素。
在下一个示例中,对于y 和z 等于1 的行,new 变量应为TRUE,否则FALSE。但结果全是FALSE。我对代码做了很多修改,尝试使用purrr::pmap.dbl和do.call,但没有成功。
library(dplyr)
test <- data.frame(x=c(0,1,1), y = c(1,1,1), z = c(1,1,0))
test %>% mutate(new = all(select(.,-x) == 1))
x y z new
1 0 1 1 FALSE
2 1 1 1 FALSE
3 1 1 0 FALSE
据了解,是一个简单的例子,但是我的变量比较多,我得用select和all之类的,具体元素不是1。
谢谢!
【问题讨论】:
-
是的,但是是否可以使条件独立于变量的数量?为什么
all不起作用?谢谢! -
我认为这应该类似于
rowSums(test[-1] == 1) == ncol(test[-1]),因为您需要先将所有列与 1 进行比较。尽管最好预先定义要使用的列,然后创建一些仅使用这些列的强大函数,例如f <- function(data, cols, value) rowSums(data[cols] == value) == length(cols)