【问题标题】:Testing multiple numeric columns to make new column测试多个数字列以创建新列
【发布时间】:2014-11-17 01:55:11
【问题描述】:

我想创建一个新的数字列,它根据多个数字列的阈值分配值。

Data<-data.frame(A=rnorm(100), B=rnorm(100), C=rnorm(100), D=rnorm(100), E=rnorm(100))

基本上,如果 A、B 或 C 列中的任何一个超过 2,我想将 5 分配给我的新列。我试过了:

  Data$Flag[if((abs(Data$A)>2 | abs(Data$B)>2 | abs(Data$C)>2)] <-5

这不起作用。任何想法,将不胜感激!

【问题讨论】:

    标签: r conditional-statements numeric logical-operators


    【解决方案1】:

    你想要:

    Data$Flag <- ifelse((abs(Data$A)>2 | abs(Data$B)>2 | abs(Data$C)>2), 5, NA)
    

    NA 替换为当它们不是全部 2 时的替代值。

    【讨论】:

      【解决方案2】:

      你也可以使用:

      Data$Flag1 <- NA^(!rowSums(abs(Data[,c('A', 'B', 'C')]) >2)) +4
      identical(Data$Flag, Data$Flag1) #Comparing the results from @Robert Krzyzanowski
      #[1] TRUE
      

      【讨论】:

        【解决方案3】:

        另一种选择:

        Data$Flag[rowSums(abs(Data[c("A","B","C")]) > 2) > 0] <- 5
        

        【讨论】:

          猜你喜欢
          • 2017-09-29
          • 1970-01-01
          • 2013-04-20
          • 2018-05-07
          • 2020-12-12
          • 1970-01-01
          • 2020-04-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多