我有一个数字数据框(m rows * n columns
)
对于此数据框的每一行,我都希望将其视为
一个数值向量(1 * n
)并从中减去另一个
固定(1 * n
)矢量。因此,对于每一行,我们返回一个
({1 * n
)个向量。
我想通过此矢量减法 返回列表
对数据框的每一行完成。所以在这种情况下
具有m
个1 * 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
的方法?
谢谢
答案 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