如何检查数据帧的行状态(使用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)