ifelse, используя некоторые условия в R - PullRequest
0 голосов
/ 05 марта 2020

мой набор данных похож на этот, и я хочу использовать ifelse или другие функции в R. Я легко могу сделать это в Excel, но не уверен, как это сделать в R.

df<-read.table(text=" Items Goods

Mug1    Cup1
Mug1    Mug2
Mug1    NA
Mug2    Mug1
Mug2    Cup2
Cup1    Mug1
Cup2    Mug2
Mug2    Cup1
Cup1    Mug2", header=TRUE)

Условия:

Mug1=Cup1
Mug2=Cup2
Cup1=Mug1
Cup2=Mug2

Если я увижу вышеуказанное условие, они считаются правильными. в противном случае они неверны. Я искал, но я не мог найти никакого решения, но, вероятно, я пропустил некоторые сайты. Любая помощь

Я получу эту таблицу тогда

Items   Goods   Out
Mug1    Cup1    Correct
Mug1    Mug2    Incorrect
Mug1    NA  NA
Mug2    Mug1    Incorrect
Mug2    Cup2    Correct
Cup1    Mug1    Correct
Cup2    Mug2    Correct
Mug2    Cup1    Incorrect
Cup1    Mug2    Incorrect

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

В base R мы можем использовать именованный вектор, заменить значения в «Товарах» с помощью именованного вектора, выполнить сравнение (==) с «Предметами», чтобы получить логический вектор, который может быть используется в ifelse или преобразовывается в индекс позиции и заменяет значения, основанные на этом индексе, на «правильные», «неправильные»

nm1 <- setNames(c("Mug1", "Mug2"), c("Cup1", "Cup2"))
nm2 <- c(nm1, setNames(names(nm1), nm1))
df$Out <-  with(df, c("Incorrect", "Correct")[1 + (as.character(Items) == 
    nm2[as.character(Goods)])])
df
#  Items Goods       Out
#1  Mug1  Cup1   Correct
#2  Mug1  Mug2 Incorrect
#3  Mug1  <NA>      <NA>
#4  Mug2  Mug1 Incorrect
#5  Mug2  Cup2   Correct
#6  Cup1  Mug1   Correct
#7  Cup2  Mug2   Correct
#8  Mug2  Cup1 Incorrect
#9  Cup1  Mug2 Incorrect

или ifelse

with(df, unname(ifelse(as.character(Items) == 
    nm2[as.character(Goods)], "Correct", "Incorrect")))
#[1] "Correct"   "Incorrect" NA          "Incorrect" "Correct"   
#[6] "Correct"   "Correct"   "Incorrect" "Incorrect"
0 голосов
/ 05 марта 2020

Вот вам go:

library(dplyr)
df<- df%>% mutate(out = ifelse(gsub("Mug","Cup",Items)==gsub("Mug","Cup",Goods),"correct","incorrect"))
...