对象的ID由不同变量中的公共值组成

时间:2018-01-10 16:49:22

标签: r

我有一个具有自我评级和同行评级的数据集。数据集采用长格式。在将数据集重新整形为宽格式之前,我想给自我评级和同行评级一个共同的ID,以便我以后可以通过该ID将同等评级与自我评级相匹配。数据如下所示:

| questionnaire | ID | REF  | SERIAL | x  | y  |
|---------------|----|------|--------|----|----|
| self          | 1  | 1234 | NA     | 4  | NA |
| self          | 2  | 2345 | NA     | 6  | NA |
| peer          | NA | NA   | 1234   | NA | 8  |
| peer          | NA | NA   | 2345   | NA | 4  |

自我评级具有引用变量(“REF”),其引用同等评级。对等评级在变量“SERIAL”中具有相同的值。

我现在正试图将相同的ID归属于同等评级,作为自评级的ID,其通过SERIAL值引用对等体。该表应如下所示:

| questionnaire | ID | REF  | SERIAL | x  | y  |
|---------------|----|------|--------|----|----|
| self          | 1  | 1234 | NA     | 4  | NA |
| self          | 2  | 2345 | NA     | 6  | NA |
| peer          | 1  | NA   | 1234   | NA | 8  |
| peer          | 2  | NA   | 2345   | NA | 4  |

我怎么能做到最好?

2 个答案:

答案 0 :(得分:0)

我可以帮你吗?我想在数据框中更改ID值。为此,我将通过从右侧对应方获取ID并将其添加到数据框中的NA中来绕行进行循环。在我的下面的代码示例中,我为每个对等体搜索了正确的ID。 map_df 函数执行循环并准备作为数据帧的输出。

simplify = TRUE

答案 1 :(得分:0)

对不起,上面的例子与我的真实数据相比太简单了。以下是数据摘录。

      structure(list(Questionnaire = c("self", "peer", "self", "peer", 
 "peer", "peer"), ID.each = c("5213", "5214", "5215", "5216", 
 "5217", "4073"), ID.match = c("5213", NA, "5215", NA, NA, "3584"
  ), SERIAL = c(NA, "YHL7ZRAER7", NA, "AHGPZZ8UEV", "2N3FYHKVW1", 
 NA), REF1 = c("YHL7ZRAER7", NA, "AHGPZZ8UEV", NA, NA, NA), REF2= c("PYAV9D6EH2", 
   NA, "2N3FYHKVW1", NA, NA, NA), x = c(4, NA, 4, NA, NA, NA), y = c(NA, 
   4, NA, 4, 3, 3)), .Names = c("Questionnaire", "ID.each", "ID.match", 
  "SERIAL", "REF1", "REF2", "x", "y"), row.names = c("5213", "5214", 
  "5215", "5216", "5217", "4073"), class = "data.frame")

每份调查问卷,无论是自己还是同伴,都有自己的ID(不应更改此值)。每个同伴报告都属于一个特定的自我报告。一些对等报告(在此示例中为具有ID 4073的对等报告)已经具有与相应自报告的公共ID。这些不需要改变。但对于一些同行报道,我希望他们拥有与他们自我报告相同的“ID.match”。例如,对等体5214应具有“ID.match”5213,因为其SERIAL号指的是自报告5213中的REF1。对等体5217应具有ID.match 5215(自我报告5215中的REF2)。

我希望我的数据看起来很清楚,我希望上面的NeRd解决方案可以转移到这些数据。我一直试图找到自己的解决方案,但我不知道。