【问题标题】:How to merge logical vectors into a new column如何将逻辑向量合并到新列中
【发布时间】:2019-02-15 05:59:36
【问题描述】:

我有许多逻辑向量列,并且希望能够将 2 列或更多列合并为一列,如果行中有任何 TRUE,则只能在合并列中获得 TRUE。

这是 2 列和各种组合的示例

X <- c(T,F,T,F,F,T,F,T,T,F,F,F)
Y <- matrix(X,nrow = 6, ncol = 2)
Y
      [,1] [,2]
[1,]  TRUE FALSE 
[2,] FALSE  TRUE
[3,]  TRUE  TRUE
[4,] FALSE FALSE
[5,] FALSE FALSE
[6,]  TRUE FALSE

如果两者都说 False,如何创建第三列“添加”真并留下,如果要添加 3 列或更多列,这是否也有效?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    如果所有列都有逻辑向量,可以使用rowSums

    cbind(Y, rowSums(Y) > 0)
    
    #      [,1]  [,2]  [,3]
    #[1,]  TRUE FALSE  TRUE
    #[2,] FALSE  TRUE  TRUE
    #[3,]  TRUE  TRUE  TRUE
    #[4,] FALSE FALSE FALSE
    #[5,] FALSE FALSE FALSE
    #[6,]  TRUE FALSE  TRUE
    

    如果任何一行中至少有 1 个TRUE,这将返回TRUE,否则返回FALSE。这也适用于任意数量的列。

    【讨论】:

      【解决方案2】:

      使用下面基于 Base R 的代码

      X <- c(T,F,T,F,F,T,F,T,T,F,F,F)
      Y <- as.data.frame(matrix(X,nrow = 6, ncol = 2))
      unique(Y$V1)
      
      Y$condition <- ifelse(Y$V1 == "TRUE" | Y$V2 == "TRUE","TRUE","FALSE")
      

      【讨论】:

        【解决方案3】:

        这是一个使用apply() 和逻辑运算符| 的可能解决方案,它适用于Y 的任意数量的列。

        result = cbind(Y, apply(Y, 1, FUN = function (x) Reduce(f="|", x)))
        result
        #       [,1]  [,2]  [,3]
        # [1,]  TRUE FALSE  TRUE
        # [2,] FALSE  TRUE  TRUE
        # [3,]  TRUE  TRUE  TRUE
        # [4,] FALSE FALSE FALSE
        # [5,] FALSE FALSE FALSE
        # [6,]  TRUE FALSE  TRUE
        

        【讨论】:

          猜你喜欢
          • 2015-08-27
          • 1970-01-01
          • 2013-10-15
          • 1970-01-01
          • 2015-01-04
          • 1970-01-01
          • 2023-04-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多