我正在处理俱乐部会员资格的数据,其中每个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
如果有人可以启发我,我将不胜感激。
答案 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$id
与match$rn
中的数字相等的位置插入mem2
。
club2$mem2 <- ifelse(club2$mem2 %in% match$rn == TRUE, match$id[match(club2$mem2, match$rn)], NA)