Как сравнить несколько строк в R? - PullRequest
0 голосов
/ 02 августа 2020

Я хотел бы сравнить несколько значений по ПОЛЬЗОВАТЕЛЮ.

На основе ПОЛЬЗОВАТЕЛЯ «A», если значения (A, B, C, D и E) совпадают с ПОЛЬЗОВАТЕЛЕМ «B» , он должен быть записан как B во вновь созданной переменной EQUAL

Вот мои данные

введите описание изображения здесь

Желаемое значение

введите описание изображения здесь

Я новичок в R, я попытался взглянуть на функцию сравнения, но меня это немного ошеломило. Буду очень признателен за любую помощь.

1 Ответ

0 голосов
/ 02 августа 2020

Вот сокращенная версия предоставленных вами данных:

library(tidyverse)

df <- data.frame(
  id = c(1001, 1002, 1003, 1001, 1002, 1003),
  user = c('a', 'a', 'a', 'b', 'b', 'b'),
  point_a = c(1, 1, NA, 1, 1, NA),
  point_b = c(NA, NA, 2, NA, NA, NA),
  point_c = c(3, 2, 3, 3, 2, 3),
  point_d = c(2, 1, NA, 2, 1, NA),
  point_e = c(4, NA, 1, 4, NA, NA)
)

df

    id user point_a point_b point_c point_d point_e
1 1001    a       1      NA       3       2       4
2 1002    a       1      NA       2       1      NA
3 1003    a      NA       2       3      NA       1
4 1001    b       1      NA       3       2       4
5 1002    b       1      NA       2       1      NA
6 1003    b      NA      NA       3      NA      NA

Если вы inner_join в столбцах, которые хотите сопоставить, а затем filter для строк, где user.x больше user.y (т.е. сначала в алфавитном порядке, чтобы избавиться от дубликатов и строк, соответствующих самим себе), у вас должны остаться совпадения, которые вы ищете:

df %>%
  inner_join(df, by = c('point_a', 'point_b', 'point_c', 'point_d', 'point_e')) %>%
  filter(user.x < user.y) %>%
  rename(user = user.x,
         equal = user.y)

  id.x user point_a point_b point_c point_d point_e id.y equal
1 1001    a       1      NA       3       2       4 1001     b
2 1002    a       1      NA       2       1      NA 1002     b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...