Заменить идентификаторы в строках на основе соответствия между двумя столбцами - PullRequest
0 голосов
/ 07 декабря 2018

Я имею дело с данными о членстве в клубе, где каждый row представляет членство клуба в одном из 10 студенческих клубов, а length непустого column представляет "размер" членства этого клуба,Каждая непустая ячейка фрейма данных заполнена «случайным числом», обозначающим членство студента в клубе (случайные числа использовались для подавления их личности).По умолчанию в каждом клубе есть как минимум один член, но не все студенты зарегистрированы в качестве членов клуба (некоторые не участвуют ни в каких клубах).Данные выглядят следующим образом (данные, представленные ниже, содержат только часть данных):

club_id	mem1	mem2	mem3	mem4	mem5	mem6	mem7
1	      339	   520	 58				
2	      700						
3	       80	   434					
4	      516	   811	471				
5	       20						
6	      211	    80	439	   516	 305		

Я хочу заменить эти случайные числа на идентификаторы учеников (не раскрывая их настоящих имен), основываясь на совпадении назначенных им случайных чисел и идентификаторов учеников;однако, только некоторые из идентификаторов учеников сопоставляются со случайными числами, назначенными этим ученикам.

Я скомпилировал их в массив данных из 2 столбцов, который доступен здесь и выглядит как

match <- read.csv("https://www.dropbox.com/s/nc98i784r91ugin/match.csv?dl=1")

head(match)
  id  rn
1  1 700
2  2 339
3  3 540
4  4  58
5  5 160
6  6 371

где столбец rm означает случайное число.

Таким образом, задачи, с которыми у меня возникают проблемы, состоят в том, чтобы (1) сопоставить и заменить случайные числа накадр данных с соответствующими им студенческими идентификаторами (2) устанавливает эти непревзойденные случайные числа как NA

. Буду очень признателен, если кто-нибудь сможет просветить меня об этом.

1 Ответ

0 голосов
/ 07 декабря 2018

Не уверен, правильно ли я понял логику.Я реплицировал только короткую версию вашей исходной таблицы и заменил первое число на 1000 (потому что это число, у которого нет совпадающего идентификатора).

club2 <- data.frame(club_id = 1:6, mem2 = c(1000, 700, 80, 516, 20, 211))

match <- read.csv("https://www.dropbox.com/s/nc98i784r91ugin/match.csv?dl=1")

Затем для столбца mem2 я проверяюесли он существует в match$rn.Если это не так, вставляется NA.Однако в этом случае он вставляет match$id - тот, который находится в позиции, где match$rn равно числу в mem2.

club2$mem2 <- ifelse(club2$mem2 %in% match$rn == TRUE, match$id[match(club2$mem2, match$rn)], NA)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...