/ / перевірити, чи є особливий предмет у інших стовпцях та копіях у кожному стовпчику в r - r, дублікатів, завершений

перевірте, чи є особливий предмет у інших стовпцях та копіях у кожному стовпчику в r - r, дублікатів, завершений

Ось дані: Приклад 1: завершено

complete <- c("A", "B", "C","J", "C1", "L", "J2", "D", "M", "N")
lst1 <- c(NA, NA, NA, "A", "N", NA,"A", "C", "D", NA )
lst2 <- c(NA, NA, NA,"A", "L", NA, "C1", "J2", "J2", "B")
datf <- data.frame (complete, lst1, lst2, stringsAsFactors = FALSE)

Приклад 2: неповне та дубльоване

complete <- c("A", "B", "C","J", "C1", "L", "C", "D", "M", "N")
lst1 <- c(NA, NA, NA, "A", "N", NA,"A", "C", "D1", NA )
lst2 <- c(NA, NA, NA,"A", "L", NA, "C1", "J2", "J2", "B2")
datf2 <- data.frame (complete, lst1, lst2, stringsAsFactors = FALSE)

Я хочу перевірити: (1), якщо члени lst1 та lst2 принаймні присутні принаймні один раз у повному обсязі. Якщо ні, то повідомлення про зупинку скаже, що це "?" присутній в lst1 або lst2 (незалежно від правильності), але не в повному обсязі. Мій пробний: наприклад 1

if (datf$lst1 %in%  datf$complete | datf$lst2 %in%  datf$complete) {
stop ("the subject in lst1 or lst2 must be complete list ")} else {
cat("I am fine")
}

I am fineWarning message:
In if (datf$lst1 %in% datf$complete | datf$lst2 %in% datf$complete) { :
the condition has length > 1 and only the first element will be used

Чому це повідомлення про помилку і як я можу його придушити?

  Example 2:
if (datf2$lst1 %in%  datf2$complete | datf2$lst2 %in%  datf2$complete) {
stop ("the subject in lst1 or lst2 must be complete list ")} else {
cat("I am fine")
}
Although there is potential errors the error message is same:
I am fineWarning message:
In if (datf2$lst1 %in% datf2$complete | datf2$lst2 %in% datf2$complete) { :
the condition has length > 1 and only the first element will be used

Також існує спосіб надати імена, які не збігаються як частина повідомлення про помилку.

(2) Якщо будь-який член повного є dublicated.

Редагувати:

Expected answer:
Example1 <-  all members of lst1 and lst2 are also member of complete

expacted message here is "I am fine"

Example2 <-
B2, J2, is member of lst2 but not complete, D1 is member of lst1 but not complete.
complete have two C, so C is duplicated.
The function will stop and print a message

"B2 and J2 are member of lst1, but not in complete
D1  is member of lst2, but not in complete,
check completeness"
"C is duplicated in complete"

Відповіді:

1 для відповіді № 1
> datf$lst1 %in% datf$complete | datf$lst2 %in% datf$complete
[1] FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE

від ?"if" аргумент для if це довжина-один логічний вектор, який не є NA.

> na.omit(datf2$lst1)[!na.omit(datf2$lst1)%in%datf2$complete]
[1] "D1"
> na.omit(datf2$lst2)[!na.omit(datf2$lst2)%in%datf2$complete]
[1] "J2" "J2" "B2"

> datf2$complete[duplicated(datf2$complete)]
[1] "C"

Вищесказане повинно допомогти вам скласти функцію, щоб зробити те, що ви пропонуєте.