使用purrr逐行减去向量

时间:2019-06-07 20:59:18

标签: r purrr

我有一个数字数据框(m rows * n columns

对于此数据框的每一行,我都希望将其视为 一个数值向量(1 * n)并从中减去另一个 固定1 * n)矢量。因此,对于每一行,我们返回一个 ({1 * n)个向量。

我想通过此矢量减法 返回列表 对数据框的每一行完成。所以在这种情况下 具有m1 * n个向量的列表。

我已经在一个简单的reprex中手动完成了2行 下方:

library(tidyverse)
#> Registered S3 methods overwritten by 'ggplot2':
# A function that takes a row as a vector
diff_vec <- function(inp_vec, diff_val){
    base::return(inp_vec - diff_val)
}

# Create a test (dummy) dataset with 3 rows and 4 columns
test_dat <- mtcars %>% dplyr::slice(c(1, 3, 6)) %>% dplyr::select(1:4)
test_dat
#>    mpg cyl disp  hp
#> 1 21.0   6  160 110
#> 2 22.8   4  108  93
#> 3 18.1   6  225 105

# This is the vector we want to subtract from each row
diff_v <- c(3.2, 5.4, 7.5, 8.2) 

first_row <- test_dat %>% dplyr::slice(1) %>% as.vector()
test_out1 <- diff_vec(inp_vec = first_row, diff_val = diff_v)
first_row
#>   mpg cyl disp  hp
#> 1  21   6  160 110
test_out1
#>    mpg cyl  disp    hp
#> 1 17.8 0.6 152.5 101.8

second_row <- test_dat %>% dplyr::slice(2) %>% as.vector()
test_out2 = diff_vec(inp_vec = second_row, diff_val = diff_v)
second_row
#>    mpg cyl disp hp
#> 1 22.8   4  108 93
test_out2
#>    mpg  cyl  disp   hp
#> 1 19.6 -1.4 100.5 84.8

reprex package(v0.2.1)于2019-06-07创建

任何人都可以显示如何使用 基于purrr的方法?

谢谢

1 个答案:

答案 0 :(得分:0)

存在一个简单的解决方案:

test_dat %>% map2_dfc(diff_v, ~ .x - .y)

产生的小标题:

    mpg    cyl  disp    hp
  <dbl>  <dbl> <dbl> <dbl>
1  17.8  0.600  152. 102. 
2  19.6 -1.4    100.  84.8
3  14.9  0.600  218.  96.8