r - 除以 Tidyverse 中 mutate 的最后一行

标签 r tidyverse dplyr

所以这是一个相对简单的问题,我有一个数据集如下

df <- structure(list(term = c("(Intercept)", "overall_quality", "overall_costs", 
"wwpf"), estimate = c(0.388607224137536, 0.456477162621961, 0.485612564501229, 
NA), std.error = c(0.499812263278414, 0.0987819420575201, 0.108042289289401, 
NA), statistic = c(0.777506381273137, 4.62105879995918, 4.49465267438447, 
NA), p.value = c(0.440597919486169, 0.0000279867005591494, 0.0000426773877613654, 
NA), average = c(NA, 8.09615384615385, 7.86538461538461, 7.90384615384615
), Elasticity = c(NA, 3.69570933584318, 3.81952959386543, NA)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -4L))

我正在尝试使用下面

df %>%  mutate(Elasticity= average*estimate/average[nrow(df)])

预期输出:https://ibb.co/42ptLXx

基本上,除以最后一行值&因为我试图将其合并到函数中,所以我需要该方法是动态的而不是硬编码值。 请帮忙!

最佳答案

我们可以使用n()返回最后一行的索引,以对该列的值进行子集化

library(dplyr)
df %>% 
    mutate(Elasticity= average*estimate/average[n()]) 

如果我们需要一个函数(使用rlang_0.4.0),我们可以使用{{..}}进行评估

f1 <- function(dat, col1, col2) {
        dat %>%
           mutate(Elasticity = {{col1}} * {{col2}}/{{col1}}[n()])
 }

f1(df, average, estimate)
# A tibble: 4 x 7
#  term            estimate std.error statistic    p.value average Elasticity
#  <chr>              <dbl>     <dbl>     <dbl>      <dbl>   <dbl>      <dbl>
#1 (Intercept)        0.389    0.500      0.778  0.441       NA        NA    
#2 overall_quality    0.456    0.0988     4.62   0.0000280    8.10      0.468
#3 overall_costs      0.486    0.108      4.49   0.0000427    7.87      0.483
#4 wwpf              NA       NA         NA     NA            7.90     NA    

关于r - 除以 Tidyverse 中 mutate 的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57277781/

相关文章:

r - 如果所有值都是 NA,则计算总和或返回 NA 的有效方法

r - 如何将 read_html 的输出保存和读取为 RDS 文件?

r - 一次旋转更长的十二列

c - 提高置换检验的 p 值矩阵构造的性能

R:从函数获取规则

r - 根据一列中的最大值和唯一值过滤行

r - 在函数中使用嵌套变量

r - 如何将一个 data.frame 中的值替换为另一个 data.frame 中的值?

r - 在 R 中按组执行 Arima 时,因子季节有新级别 4

r - 在循环中汇总并生成多个变量