根据两列之间的匹配替换行中的ID号

时间:2018-12-07 10:30:01

标签: r dataframe match

我正在处理俱乐部会员资格的数据,其中每个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		

我想根据分配给他们的随机数和他们的学生编号之间的匹配,将这些随机数替换为学生编号(不透露其真实姓名);但是,只有部分学生ID与分配给这些学生的随机数匹配。

我将它们编译成2列的数据框,here可用,看起来像

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)将数据框上的随机数匹配并替换为其相应的学生ID (2)将不匹配的随机数设置为NA

如果有人可以启发我,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

不确定我的逻辑是否正确。我只复制了初始表的一个简短版本,并将第一个数字替换为1000(因为该数字没有匹配的ID)。

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$idmatch$rn中的数字相等的位置插入mem2

club2$mem2 <- ifelse(club2$mem2 %in% match$rn == TRUE, match$id[match(club2$mem2, match$rn)], NA)