我使用dplyr中的do()函数将不同长度的曲线插值为相同长度的曲线。
然而,正确格式化结果的最后一步让我感到困惑。目前,我得到了一个数据框,每个组只有一行,每个变量都是一个包含结果的列表。
library(dplyr)
library(tidyr)
df = data.frame(id = c(rep('a', 6), rep('b', 8)),
time = c(1:6, 1:8),
val = c(0.1, 0.2 ,0.4,0.6,0.75,1,
0.1, 0.25, 0.45, 0.6, 0.8, 0.9, 0.95, 1),
stringsAsFactors = FALSE) %>%
group_by(id) %>%
mutate(total = n(),
perc = time / total) %>%
do(elapsed_perc= 1:5 / 5,
duration_prog=approx(x=.$perc, y=.$val, xout = 1:5 / 5,)$y)
相反,我希望每个组都能获得与观察数相同的行。因此,在下面的情况下,我希望对于组'a'和组'b'都有5行。
一种解决方法是重新创建数据框(我当然可以轻松地使其动态):
df.new = data.frame(id = rep(c('a', 'b'), each = 5),
elapsed_perc = unlist(df$elapsed_perc),
duration_prog = unlist(df$duration_prog))
然而,我希望不必创建新的数据框来实现这一点。你们中有人知道如何做吗?