Назначьте уникальный идентификатор, если одно значение дублируется хотя бы в одном из трех столбцов - PullRequest
0 голосов
/ 08 мая 2019

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

Фрейм данных выглядит так

df=data.frame(id1=c(5,5,NA,NA,NA,5,4,NA,NA),
              id2=c(NA,58,58,58,NA,58,NA,66,66),
              id3=c(NA,NA,NA,581,581,581,NA,669,NA))
df
  id1 id2 id3
1   5  NA  NA
2   5  58  NA
3  NA  58  NA
4  NA  58 581
5  NA  NA 581
6   5  58 581
7   4  NA  NA
8  NA  66 669
9  NA  66  NA

Новый столбец должен выглядеть так

df=data.frame(id1=c(5,5,NA,NA,NA,5,4,NA,NA),
              id2=c(NA,58,58,58,NA,58,NA,66,66),
              id3=c(NA,NA,NA,581,581,581,NA,669,NA),
              ID=c(1,1,1,1,1,1,2,3,3))
  id1 id2 id3 ID
1   5  NA  NA  1
2   5  58  NA  1
3  NA  58  NA  1
4  NA  58 581  1
5  NA  NA 581  1
6   5  58 581  1
7   4  NA  NA  2
8  NA  66 669  3
9  NA  66  NA  3

1 Ответ

0 голосов
/ 09 мая 2019

Учитывая ваш ответ на вопрос @Gregor, вот несколько обобщенное решение:

ID1.criteria <- c(5,58,581)
ID2.criteria <- c(4)
ID3.criteria <- c(66,669)
ID <- NULL
for (i in 1:nrow(df)) {
  if (any(df[i,] %in% ID1.criteria)) {
    ID[i] <- 1
  } else {
    if (any(df[i,] %in% ID2.criteria)) {
      ID[i] <- 2
    } else {
      if (any(df[i,] %in% ID3.criteria)) {
        ID[i] <- 3
      } else {
        ID[i] <- NA
      }
    }
  }
}
df$ID <- ID
df
  id1 id2 id3 ID
1   5  NA  NA  1
2   5  58  NA  1
3  NA  58  NA  1
4  NA  58 581  1
5  NA  NA 581  1
6   5  58 581  1
7   4  NA  NA  2
8  NA  66 669  3
9  NA  66  NA  3

При необходимости вы можете установить критерии так, как вам нужно, учитывая, что конечный набор идентификаторов id1, id2 и id3 соответствует одному и тому же идентификатору, независимо от порядка их поступления и никогда присутствует в том же ряду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...