如果我有这张table:
a <- as.data.frame(matrix(c("1", "1", "1", "1", "2", "2", "A first day", "A last day", "B first day", "B last day", "A first day", "A last day", 3, 5, 10, 14, 2, 5), ncol = 3))
colnames(a) = c("Patient", "Treatment", "Day")
它看起来像这样:
| 病人|治疗|日|
| --------------|--------------|--------------|
| 1个|第一天|三|
| 1个|最后一天|五|
| 1个|B第一天|10个|
| 1个|B最后一天|十四岁|
| 二|第一天|二|
| 二|最后一天|五|
我怎样才能转换它,使每天从第一天到最后一天都有自己的一行,使表看起来像这样?
| 病人|治疗|日|
| --------------|--------------|--------------|
| 1个|A|三|
| 1个|A|四|
| 1个|A|五|
| 1个|B|10个|
| 1个|B|十一|
| 1个|B|十二岁|
| 1个|B|十三|
| 1个|B|十四岁|
| 二|A|二|
| 二|A|三|
| 二|A|四|
| 二|A|五|
谢谢大家!
3条答案
按热度按时间lo8azlld1#
我们需要为每个患者创建唯一的治疗组,因此我们需要去掉列中的“第一天”和“最后一天”字符串。然后
group_by
Patient
和Treatment
列以创建唯一组,并使用reframe
基于Day
的min
和max
生成新的Day
序列。bxgwgixi2#
首先使用
sub
删除多余的文本。然后将by
拆分为ID变量(在本例中为1:2
)和cbind
1
Dataframe 的第一行减去日期变量-3
,然后在do.call
中使用:
来获得序列,最后rbind
所有内容。我添加了一些额外的列来证明它们是保留的。6fe3ivhb3#
以下是
complete
与fill
组合的解决方案: