【问题标题】:R Ifelse: Find if any column meet the conditionR ifelse:查找是否有任何列满足条件
【发布时间】:2020-06-19 16:27:51
【问题描述】:

我正在尝试对数组的多个列应用相同的条件,然后,如果任何列满足条件,则创建一个新列。

我可以使用 OR 语句手动执行此操作,但我想知道是否有一种简单的方法可以将其应用于更多列。

一个例子:

data <- data.frame(V1=c("A","B"),V2=c("A","A","A","B","B","B"),V3=c("A","A","B","B","A","A"))
data[4] <- ifelse((data[1]=="A"|data[2]=="A"|data[3]=="A"),1,0)

所以第 4 行是唯一不满足所有列条件的:

  V1 V2 V3 V1
1  A  A  A  1
2  B  A  A  1
3  A  A  B  1
4  B  B  B  0
5  A  B  A  1
6  B  B  A  1

您知道在更短的代码中应用条件的方法吗? 我尝试了类似的东西

data[4] <- ifelse(any(data[,c(1:3)]=="A"),1,0)

但它考虑所有数据集的条件而不是按行,因此所有行都被赋予 1。

【问题讨论】:

    标签: r if-statement conditional-statements multiple-columns


    【解决方案1】:

    我们可以使用Reducelapply

    data$NewCol <- +( Reduce(`|`, lapply(data, `==`, 'A')))
    

    【讨论】:

      【解决方案2】:

      我们可以使用apply row-wise :

      data$ans <- +(apply(data[1:3] == "A", 1, any))
      data
      
      #  V1 V2 V3 ans
      #1  A  A  A   1
      #2  B  A  A   1
      #3  A  A  B   1
      #4  B  B  B   0
      #5  A  B  A   1
      #6  B  B  A   1
      

      【讨论】:

        【解决方案3】:

        试试:

        data$V4 <- +(rowSums(data == 'A') > 0)
        

        输出:

          V1 V2 V3 V4
        1  A  A  A  1
        2  B  A  A  1
        3  A  A  B  1
        4  B  B  B  0
        5  A  B  A  1
        6  B  B  A  1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-19
          • 2022-06-13
          • 1970-01-01
          • 1970-01-01
          • 2021-04-25
          • 1970-01-01
          • 2013-03-06
          • 1970-01-01
          相关资源
          最近更新 更多