【发布时间】:2019-11-17 13:42:28
【问题描述】:
我是 R 和 tidyverse 的新手,我正在尝试了解如何使用 purrr 来递归添加。
我有一个由 8 行和 4 列组成的小标题。 tibble 中的数据代表比赛中两点的跑步者。列如下:
- 点 - 比赛中的点(即 1/2 路和终点)
- 位置 - 跑步者当时在比赛中的位置
- 跑步者 - 跑步者姓名
- lengthsAhead - 一个跑步者领先下一个跑步者的距离
我想计算打过的长度,定义为第一名之后的长度。例如,第一名的跑步者的节拍长度将为 0,并且将是 lengthsAhead 的总和,其中位置小于我对所有其他跑步者的位置。
问题:我如何使用 purr 以整洁的方式实现这一目标。我的目标是有一个名为 beatenLengths 的新列,其中包含每个点、跑步者和位置的值。
我的想法是尝试类似的事情,但我成功了:
df2 = df %>%
group_by(position) %>%
mutate(bl =if_else(position==1,0,map(lengthsAhead,someFunction)))
我尝试在下面使用代表:
library(tidyverse)
#> Warning: package 'tidyverse' was built under R version 3.5.3
#> Warning: package 'ggplot2' was built under R version 3.5.3
#> Warning: package 'tidyr' was built under R version 3.5.3
#> Warning: package 'readr' was built under R version 3.5.3
#> Warning: package 'purrr' was built under R version 3.5.3
#> Warning: package 'dplyr' was built under R version 3.5.3
#> Warning: package 'stringr' was built under R version 3.5.3
#> Warning: package 'forcats' was built under R version 3.5.3
df = tibble(point = c(1, 1,1,1,2,2,2,2),
position=c(1,2,3,4,1,2,3,4),
runners = c("John","Bill", "Sam", "Sally","John","Bill", "Sally", "Sam"),
lengthsAhead = c(0.25,0.75,2.0,0,2.25,1.75,3.0,0))
df
#> # A tibble: 8 x 4
#> point position runners lengthsAhead
#> <dbl> <dbl> <chr> <dbl>
#> 1 1 1 John 0.25
#> 2 1 2 Bill 0.75
#> 3 1 3 Sam 2
#> 4 1 4 Sally 0
#> 5 2 1 John 2.25
#> 6 2 2 Bill 1.75
#> 7 2 3 Sally 3
#> 8 2 4 Sam 0
【问题讨论】:
-
@IceCreamToucan - 是的,这正是我想要的。我想我不需要使用 purrr 或自定义函数。谢谢你。您要正式回答这个问题吗?