gpt4 book ai didi

r - 按组将 dplyr do() 输出格式化为 data.frame

转载 作者:行者123 更新时间:2023-12-04 20:35:12 24 4
gpt4 key购买 nike

我使用 dplyr 通过 do() 函数将不同长度的曲线插入到相同长度的曲线中。

然而,正确格式化结果的最后一步让我望而却步。目前我得到一个具有以下设置的 data.frame:每组一行,每个变量都有一个带有结果的列表。

    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 行。

一个解决方案是重新创建 data.frame (我当然可以轻松地使其成为动态):
df.new = data.frame(id = rep(c('a', 'b'), each = 5),
elapsed_perc = unlist(df$elapsed_perc),
duration_prog = unlist(df$duration_prog))

但是,我想这样做而不必创建新的数据框。
你们中有人知道怎么做吗?

最佳答案

我们可以使用 unnest

library(tidyr)
unnest(df, elapsed_perc, duration_prog)
# id elapsed_perc duration_prog
# <chr> <dbl> <dbl>
#1 a 0.2 0.12
#2 a 0.4 0.28
#3 a 0.6 0.52
#4 a 0.8 0.72
#5 a 1.0 1.00
#6 b 0.2 0.19
#7 b 0.4 0.48
#8 b 0.6 0.76
#9 b 0.8 0.92
#10 b 1.0 1.00

关于r - 按组将 dplyr do() 输出格式化为 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37208978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com