我有以下数据集:
individual number treatment
1 1 AAAA
1 2 BBBB
1 3 CCCC
1 4 EEEE
1 5 XXXX
1 7 WWWW
2 2 EEEE
2 3 AAAA
2 5 RRRR
个人可以采取不同的治疗方法。我需要为每个人添加新的行,直到他们接受的最大治疗次数(例如individual_id=1至7,individual_id=2至5),治疗= NA。我想要这样的东西:
individual_id number treatment
1 1 AAAA
1 2 BBBB
1 3 CCCC
1 4 EEEE
1 5 XXXX
1 6 NA
1 7 WWWW
2 1 NA
2 2 EEEE
2 3 AAAA
2 4 NA
2 5 RRRR
2条答案
按热度按时间piv4azn71#
考虑为所有可能的个体和治疗编号配对构建辅助数据框,然后使用原始数据集运行左连接合并。
下面的
by
按 individual 进行拆分,以使用expand.grid
迭代构建 Dataframe ,用于 individual 和 number 的所有成对组合。最后,do.call
将组子集 Dataframe 的列表绑定到单个最终 Dataframe 中:fill_df。cngwdvgl2#
我们可以使用tidyverse来实现:
**注意:**对于此特定问题,基于下面的注解,
number = seq(min(number), max(number), 1)
...应该是number = seq(1, max(number), 1)
,因为1
总是第一个number
,无论它是否存在于记录中。但我保留了它,因为这似乎是一个更一般的解决方案。