如何检查数据帧的行状态(使用dplyr、purrr等)?

如何检查数据帧的行状态(使用dplyr、purrr等)?,r,dataframe,dplyr,purrr,R,Dataframe,Dplyr,Purrr,我有一个数据框,我想为每一行生成一个变量,告诉我们某个变量子集的所有元素是否等于给定的元素 在下一个示例中,对于y和z等于1的行,new变量应为TRUE,否则为FALSE。但结果都是错误。我在代码中做了很多更改,并尝试使用purr::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(sele

我有一个数据框,我想为每一行生成一个变量,告诉我们某个变量子集的所有元素是否等于给定的元素

在下一个示例中,对于
y
z
等于
1
的行,
new
变量应为
TRUE
,否则为
FALSE
。但结果都是
错误
。我在代码中做了很多更改,并尝试使用
purr::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
库(dplyr)
测试%变异(新=全部(选择(,-x)==1))
x y z新
1011错误
2 1错误
3110错
可以理解,这是一个简单的例子,但是我有更多的变量,我必须使用
select
all
或类似的东西,并且特定的元素不是
1

谢谢大家!

试试看:

test %>% mutate(new = y&z)

与0/1以外的其他值一起使用

我在您作为示例给出的数据框中添加了其他功能。我认为您要检查或确保的唯一条件是
y
z
同时等于
1

test%>%mutate(new=ifelse((y==1&z==1),TRUE,FALSE))
数据 结构(列表(x=c(0,1,1,2),y=c(1,1,1,2),z=c(1, 1,0,2),d=c(0,0,0,2),e=c(1,2,2)),class=“data.frame”,row.names=c(NA, -(4升)
更新

目前我会做:

库(tidyverse)
全部成本%
变异(新=所有列(跨(-x,~`==`,1)))
旧的

我想我已经找到了解决问题的办法:

test %>% 
  mutate(new = 
    purrr::pmap(mutate_at(., vars(-x), `==`, 1) %>% select(-x), all) %>% 
    unlist())
我在问题中测试的问题似乎是,
select(,-x)==1的输出不是一个数据帧,而是一个矩阵

谢谢大家!

A data.table解决方案:

setDT(test)[y == 1 & z == 1, new := TRUE]
当条件满足时,将为您提供
TRUE
,否则为
NA
。如果需要
FALSE
,则:

setDT(test)[, new := FALSE]
test[y ==1 & z ==1, new := TRUE]

是的,但有可能使条件独立于变量的数量吗?为什么
all
不起作用?非常感谢。我认为这应该类似于
行和(test[-1]==1)==ncol(test[-1])
,因为您需要首先将所有列与1进行比较。虽然最好预先定义要使用的列,然后创建一些只使用这些列的健壮函数,比如
f或
test%>%mutate(new=y==1&z==1)