#r #if-statement #replace #multiple-columns
#r #оператор if #заменить #несколько столбцов
Вопрос:
Я пытаюсь сравнить разные столбцы («Test1» — «Test3») с одним базовым столбцом («Критерии») и заменить значения в зависимости от результата сравнения.
Вот пример — рассмотрим следующие данные:
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
Спасибо всем, что нашли время! Вы, ребята, отлично справляетесь!
Ответ №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
column и присваиваем 1, если они разные, и 0 в противном случае.
используется для изменения логических значений ( TRUE
/ FALSE
) на целочисленные значения ( 1
/ 0
).
Ответ №2:
Подход dplyr
:
library(dplyr)
Test.data %>% mutate(across(-Criteria, ~as.numeric(. != Criteria)))