【发布时间】:2021-07-08 17:40:11
【问题描述】:
数据框列表:
mylist <- diamonds %>%
mutate(somenum = rnorm(nrow(.))) %>%
group_by(cut, color) %>%
group_split %>%
map(~ list(dta = ., initial_val = rnorm(1)))
例如mylist 中的第一项:
mylist[1]
[[1]]
[[1]]$dta
# A tibble: 163 x 11
carat cut color clarity depth table price x y z somenum
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <dbl>
1 0.75 Fair D SI2 64.6 57 2848 5.74 5.72 3.7 0.302
2 0.71 Fair D VS2 56.9 65 2858 5.89 5.84 3.34 0.500
3 0.9 Fair D SI2 66.9 57 2885 6.02 5.9 3.99 0.179
4 1 Fair D SI2 69.3 58 2974 5.96 5.87 4.1 1.25
5 1.01 Fair D SI2 64.6 56 3003 6.31 6.24 4.05 -0.731
6 0.73 Fair D VS1 66 54 3047 5.56 5.66 3.7 0.758
7 0.71 Fair D VS2 64.7 58 3077 5.61 5.58 3.62 -1.43
8 0.91 Fair D SI2 62.5 66 3079 6.08 6.01 3.78 0.820
9 0.9 Fair D SI2 65.9 59 3205 6 5.95 3.94 -1.81
10 0.9 Fair D SI2 66 58 3205 6 5.97 3.95 -0.179
# … with 153 more rows
[[1]]$initial_val
[1] 1.788348
列表项包含一个数据框以及一个数字“initial_val”。
对于列表中的每个数据框,我想在其上变异一个新字段“cumsum_someval”,该字段以列表项的 initial_val 开头,然后通过将 initial_val 的滞后累积和与行相加来“构建它” somenum的条目。例如。第一行,cumsum_someval 的值就是 initial_val 1.788348。但是cumsum_someval的第二行应该是1.788348 + 0.302 = 2.090348。然后,第三行将是2.090348 + 0.500 = 2.590348。以此类推。
也许像purrr::map 这样带有自定义功能的东西...?
myfun <- function(dta, initial_val) {
cum_val = initial_val + dta$somenum[<rownumber here>]
}
接受建议。
对于 mylist 中的每个数据框,我如何构建这个以 initial_val 开头的新变异字段,然后继续求和 somenum 的每个实例的滞后?
【问题讨论】: