Определить, идентичны ли ячейки столбца соответствующим строкам других столбцов. - PullRequest
1 голос
/ 18 октября 2019

Например, у меня есть фрейм данных, я хочу знать, идентичны ли ячейки в столбце "x" соответствующим строкам других столбцов.

mydf <- data.frame(
  x = paste(letters[1:5]),
  y_1 = c("a","f","g","h","k"),
  y_2 = c("z","x","l","q","n"),
  y_3 = c("q","f","d","c","e")
)

Я хочу, чтобы результат выглядел следующим образом:

 x y_1 y_2 y_3 result
 a   a   z   q    yes
 b   f   x   f     no
 c   g   l   d     no
 d   h   q   c     no
 e   k   n   e    yes

Ответы [ 3 ]

3 голосов
/ 18 октября 2019

Один dplyr параметр может быть:

mydf %>%
 mutate(result = rowSums(select(., starts_with("y")) == x) > 0)

  x y_1 y_2 y_3 result
1 a   a   z   q   TRUE
2 b   f   x   f  FALSE
3 c   g   l   d  FALSE
4 d   h   q   c  FALSE
5 e   k   n   e   TRUE

Небольшое примечание: я использовал параметр stringsAsFactors = FALSE в функции data.frame(), таким образом, не преобразовывая строки в факторы.

1 голос
/ 18 октября 2019

Вот еще один:

 size=ncol(mydf)  
 my_function <- function(mydf) {

  mydf[1] %in% mydf[c(2:size)]
}

mydf$result <- ifelse(apply(mydf, 1,my_function), "Yes", "No")
mydf
#  x y_1 y_2 y_3 result
#1 a   a   z   q    Yes
#2 b   f   x   f     No
#3 c   g   l   d     No
#4 d   h   q   c     No
#5 e   k   n   e    Yes
0 голосов
/ 18 октября 2019

Во-первых, преобразуйте в символы, чтобы мы не сравнивали коэффициенты с разными уровнями

mydf[] <- lapply(mydf, as.character)

Затем вы можете пропустить все столбцы mydf, но во-первых, проверяя, равно ли оно ==до mydf$x. Теперь у вас есть логический вектор для каждого столбца, и вы можете свернуть их в один вектор, последовательно применяя | (или функцию).

mydf$result <- Reduce('|', lapply(mydf[-1], '==', mydf$x))

mydf
#   x y_1 y_2 y_3 result
# 1 a   a   z   q   TRUE
# 2 b   f   x   f  FALSE
# 3 c   g   l   d  FALSE
# 4 d   h   q   c  FALSE
# 5 e   k   n   e   TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...