【问题标题】:Compare Columns and replace Values in R比较列并替换 R 中的值
【发布时间】:2021-04-07 12:07:53
【问题描述】:

我正在尝试将不同的列(“Test1”-“Test3”)与一个基本列(“Criteria”)进行比较,并根据比较结果替换值。

这是一个示例 - 考虑以下数据:

Test.data <- data.frame(c("Yes", "Yes", "No", "Yes"))
Test.data$Test1 <- (c("No", "No", "Yes", "Yes"))
Test.data$Test2 <- (c("Yes", "No", "Yes", "No"))
Test.data$Test3 <- (c("Yes", "Yes", "Yes", "Yes"))
colnames(Test.data) <- c("Criteria", "Test1", "Test2", "Test3")


  Criteria Test1 Test2 Test3
1      Yes    No   Yes   Yes
2      Yes    No    No   Yes
3       No   Yes   Yes   Yes
4      Yes   Yes    No   Yes

如果特定列中的值对应于基本列,是否有一种有效的方法将“Test1”-“Test3”中的值替换为 0,如果不对应,则替换为 1?也许有一个 if 函数?

结果应如下所示:

  Criteria Test1 Test2 Test3
1      Yes    1      0     0
2      Yes    1      1     0
3       No    1      1     1
4      Yes    0      1     0

感谢大家抽出宝贵时间!你们做得很好!

【问题讨论】:

    标签: r if-statement replace multiple-columns


    【解决方案1】:

    你可以使用:

    Test.data[-1] <- +(Test.data$Criteria != Test.data[-1])
    Test.data
    
    #  Criteria Test1 Test2 Test3
    #1      Yes     1     0     0
    #2      Yes     1     1     0
    #3       No     1     1     1
    #4      Yes     0     1     0
    

    [-1] 是忽略Criteria 列,因为我们不想更改它。我们将所有列与Criteria 列进行比较,如果它们不同,则分配 1,否则分配 0。 + 用于将逻辑值(TRUE/FALSE)更改为整数值(1/0)。

    【讨论】:

      【解决方案2】:

      dplyr 方法:

      library(dplyr)
      
      Test.data %>% mutate(across(-Criteria, ~as.numeric(. != Criteria)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-28
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 2015-09-27
        相关资源
        最近更新 更多