我有一个R语言的框架
# A tibble: 2 × 2
year med
<dbl> <dbl>
1 2004 16753.
2 2021 28868.
它可以用这个dput创建:
structure(list(year = c(2004, 2021), med = c(16752.7, 28868.05
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-2L))
现在我想计算最近一年的med
值与最低一年的med
值的比值。在许多这样的框架中,年份可能会有所不同,所以它应该更通用。
我想这个方法可能行得通:
df %>%
mutate(ratio = med[[year == max(year)]] / med[[year == min(year)]]) %>%
但事实并非如此。如果我使用一个[
,而不是一个双括号[[
,它可以工作:
a %>%
mutate(ratio = med[year == max(year)] / med[year == min(year)]) %>%
我有点困惑,因为我以为我会使用[[
语法和布尔值(year == max(year)
)选择med
列的单个元素。
1条答案
按热度按时间qrjkbowd1#
在
dplyr::mutate()
内部,当引用一个列时,它本质上是一个向量,这就是为什么使用单括号。但是,您可以使用dplyr::first()
和dplyr::last()
来引用相应的值。如果您的数据中有另一列指定了信息所涉及的组,则可以扩展上述代码来计算每个组的比率。