【问题标题】:In R, Filling value of multiple cells from the value of other multiple cells in other rows based on repeated ID?在R中,根据重复ID从其他行中其他多个单元格的值填充多个单元格的值?
【发布时间】:2016-02-07 14:36:32
【问题描述】:

这可能有点令人困惑,但是,请看下表:

ID  |  PatientID  |  VisitCode  |  EXAMDATE  |  AGE
--------------------------------------------------------
1   |  7362       |  BL      | 21/08/2015 |     19
2   |  7362       |  M06     | 21/08/2015 |     NA
3   |  7362       |  M36     | 21/08/2015 |     NA

4   |  7363       |  BL      | 21/08/2015 |     NA
5   |  7363       |  M36     | 21/08/2015 |     70

6   |  7366       |  BL      | 21/08/2015 |     NA
7   |  7366       |  M03     | 21/08/2015 |     65
8   |  7366       |  M06     | 21/08/2015 |     NA
9   |  7366       |  M012    | 21/08/2015 |     NA

上面的示例显示了 3 位患者在不同就诊时记录的数据。问题是在一些访问中,一些数据被填写为NA,因为它不可用,因为它已经记录在以前的访问中。

预期输出:

ID  |  PatientID  |  VisitCode  |  EXAMDATE  |  AGE
--------------------------------------------------------
1   |  7362       |  BL      | 21/08/2015 |     19
2   |  7362       |  M06     | 21/08/2015 |     19
3   |  7362       |  M36     | 21/08/2015 |     19

4   |  7363       |  BL      | 21/08/2015 |     70
5   |  7363       |  M36     | 21/08/2015 |     70

6   |  7366       |  BL      | 21/08/2015 |     65
7   |  7366       |  M03     | 21/08/2015 |     65
8   |  7366       |  M06     | 21/08/2015 |     65
9   |  7366       |  M012    | 21/08/2015 |     65

我想要一个代码,根据不是 NA 的最近访问来替换每个患者的 NA。 访问代码列表:

  • BL
  • M03
  • M06
  • M012
  • M036

【问题讨论】:

  • 如果您添加了预期的输出数据会很有帮助。还要确保您的示例不太简化。如果存在具有相同 ID 的两个值的情况,则应添加所需的行为。根据您可能遇到的情况,使示例多样化。
  • 您说的是 3 个患者,但我可以看到 2 个唯一 ID....
  • @PierreLafortune 对我添加了预期输出的混乱感到抱歉
  • @AntoniosK 输入错误,我已更改 ID,谢谢
  • @jeremycg 的解决方案非常适合您的要求。但是正如@PierreLafortune 提到的,您应该考虑您提供的示例是否过于简单。例如。如果患者 7362 去年 18 岁时访问过,那么仅对 PatientID 进行分组将用 18 替换所有内容(NA 和 19)。因此,通过一个简化的示例,您将得到一个很好的答案,但您必须这样做对您的真实数据集进行大量调试。

标签: r filter filtering na


【解决方案1】:

使用 dplyr:

library(dplyr)
dat %>% group_by(PatientID) %>%
        mutate(AGE = AGE[!is.na(AGE)][1])

Source: local data frame [9 x 5]
Groups: PatientID [3]

     ID PatientID VisitCode   EXAMDATE   AGE
  (int)     (int)    (fctr)     (fctr) (int)
1     1      7362        BL 21/08/2015    19
2     2      7362       M06 21/08/2015    19
3     3      7362       M36 21/08/2015    19
4     4      7363        BL 21/08/2015    70
5     5      7363       M36 21/08/2015    70
6     6      7366        BL 21/08/2015    65
7     7      7366       M03 21/08/2015    65
8     8      7366       M06 21/08/2015    65
9     9      7366      M012 21/08/2015    65

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多