R语言 根据其他列中的条件从列中选择值以计算数据库中的值

ehxuflar  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(115)

我有一个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列的单个元素。

qrjkbowd

qrjkbowd1#

dplyr::mutate()内部,当引用一个列时,它本质上是一个向量,这就是为什么使用单括号。但是,您可以使用dplyr::first()dplyr::last()来引用相应的值。

df |>
  dplyr::arrange(year) |>
  dplyr::mutate(
    ratio = dplyr::last(med) / dplyr::first(med)
  )

如果您的数据中有另一列指定了信息所涉及的组,则可以扩展上述代码来计算每个组的比率。

相关问题