我正在尝试使用dplyr对变量进行分组,并确定数据集中每个位置的最近位置。我还想包括所有未测量距离(NA)的行。
# Set up df of place, distance, and destination.
df <- data.frame(place = c('A','B','B','C','C','D','D'),dist = c(NA, 4, 1, 6, 3, 1, 1), dest = 1:7)
# For each place, get the nearest destination.
df %>%
group_by(place) %>%
top_n(1, desc(dist))
# This does not return a row for place A.
是否有一个tidyr解决方案,可用于使用top_n根据排名识别行,这些行还将包括尚未排名的行?预先谢谢你。
答案 0 :(得分:0)
这可行,但是可能有更有效的解决方案。
coalesce(dist, max(dist), ...)
在这里是因为我们优先考虑非null值。然后,我们要确保随机值不会以top_n结尾,因此我们采用了该组的max(dist)
。最后,要实际返回值,我在其中放了一个数字-您可以使用任何数字。
如果您要进行非desc,则可能会使用min(dist)
而不是max(dist)
。
df %>%
group_by(place) %>%
top_n(1, desc(coalesce(dist, max(dist)+1, 0)))
place dist dest
<fct> <dbl> <int>
1 A NA 1
2 B 1 3
3 C 3 5
4 D 1 6
5 D 1 7