繁体   English   中英

如何检查数据框的 rowwise 条件(使用 dplyr、purrr 等)?

[英]How to check rowwise condition for a data frame (with dplyr, purrr, etc)?

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

在下一个示例中,对于yz等于1的行, new变量应为TRUE ,否则为FALSE 但结果全是FALSE 我对代码进行了很多更改,并尝试使用purrr::pmap.dbldo.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

据了解,这是一个简单的例子,但是我有更多的变量,我必须使用selectall或类似的东西,并且具体元素不是1

谢谢!

更新

目前我会这样做:

library(tidyverse)
all_cols <- function(df) reduce(df, `&`)
test %>% 
    mutate(new = all_cols(across(-x,~`==`(.,1))))

老的

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

test %>% 
  mutate(new = 
    purrr::pmap(mutate_at(., vars(-x), `==`, 1) %>% select(-x), all) %>% 
    unlist())

我在问题中测试的问题似乎是select(.,-x) == 1的输出不是数据框而是矩阵...

谢谢!

尝试 :

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

适用于 0/1 以外的其他值

我在您作为示例提供的数据框中添加了其他功能。 我相信您要检查或确保的唯一条件是yz同时等于1 &

test %>% mutate(new = ifelse((y ==1 & z==1),TRUE,FALSE))

数据

structure(list(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, 2)), class = "data.frame", row.names = c(NA, 
-4L))

一个 data.table 解决方案:

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

当条件满足时会给你TRUE ,否则会给你NA 如果您需要FALSE ,则:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM