r - 在嵌套的 ifelse 语句中使用 any

标签 r if-statement dplyr any

数据:

set.seed(1337)
m <- matrix(sample(c(0,0,0,1),size = 50,replace=T),ncol=5) %>% as.data.frame
colnames(m)<-LETTERS[1:5]

代码:

m %<>%
        mutate(newcol       = ifelse(A==1&(B==1|C==1)&(D==1|E==1),1,
                                     ifelse(any(A,B,C,D,E),0,NA)),
               desiredResult= ifelse(A==1&(B==1|C==1)&(D==1|E==1),1,
                                     ifelse(!(A==0&B==0&C==0&D==0&E==0),0,NA)))

看起来像:

   A B C D E newcol desiredResult
1  0 1 1 1 0      0             0
2  0 1 0 0 1      0             0
3  0 1 0 0 0      0             0
4  0 0 0 0 0      0            NA
5  0 1 0 1 0      0             0
6  0 0 1 0 0      0             0
7  1 1 1 1 0      1             1
8  0 1 1 0 0      0             0
9  0 0 0 0 0      0            NA
10 0 0 1 0 0      0             0

问题

我要newcoldesiredResult相同.

为什么我不能使用 anyifelse的“分层”方式.有没有像any这样的功能那在那种情况下行得通吗?

可能的解决方法

我可以定义一个函数 any_vec <- function(...) {apply(cbind(...),1,any)}但这并没有让我笑得太多。

喜欢答案中的建议

使用 pmax与矢量化的 any 完全一样.

m %>%
    mutate(pmaxResult = ifelse(A==1& pmax(B,C) & pmax(D,E),1,
                                 ifelse(pmax(A,B,C,D,E),0,NA)),
           desiredResult= ifelse(A==1&(B==1|C==1)&(D==1|E==1),1,
                                 ifelse(!(A==0&B==0&C==0&D==0&E==0),0,NA)))

最佳答案

这是另一种方法。我在开始时转换为逻辑,在结束时转换回整数:

m %>% 
  mutate_all(as.logical) %>% 
  mutate(newcol       = A & pmax(B,C) & pmax(D, E) ,
         newcol       = replace(newcol, !newcol & !pmax(A,B,C,D,E), NA)) %>% 
  mutate_all(as.integer)

#    A B C D E newcol
# 1  0 1 1 1 0      0
# 2  0 1 0 0 1      0
# 3  0 1 0 0 0      0
# 4  0 0 0 0 0     NA
# 5  0 1 0 1 0      0
# 6  0 0 1 0 0      0
# 7  1 1 1 1 0      1
# 8  0 1 1 0 0      0
# 9  0 0 0 0 0     NA
# 10 0 0 1 0 0      0

我基本上用 pmax 替换了 any

关于r - 在嵌套的 ifelse 语句中使用 any,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50353376/

相关文章:

r - 如何计算一个值在另一个值之后出现的次数

r - R 中的一致错误管理

r - 根据列名称向量缩放列

R Shiny 的 react 文件列表

python - Python 中网格数据的 PolarColor map 绘图

Bash - 检查哪个变量不等于零

java 图形用户界面 : while loop and if/else statement

java - 如何在 Android studio 中一次运行多个案例

使用过滤器按组将 NA 值替换为平均值

r - 如何根据名称模式改变多列?