【发布时间】:2022-10-07 19:29:51
【问题描述】:
不幸的是,我面临的问题是我的 for 循环或扫描命令不起作用。我有一个从大型 Excel 电子表格 (10000 x 26) 读取的数据集 (df1) 和另一个 Excel 电子表格 (1 x 26) 的另一个数据集 (df2)。我想用df2减去/添加df1的每一行。不幸的是,我的代码不起作用。 为了更好地展示它,我在下面添加了一张我正在计划的图片。 enter image description here
【问题讨论】:
不幸的是,我面临的问题是我的 for 循环或扫描命令不起作用。我有一个从大型 Excel 电子表格 (10000 x 26) 读取的数据集 (df1) 和另一个 Excel 电子表格 (1 x 26) 的另一个数据集 (df2)。我想用df2减去/添加df1的每一行。不幸的是,我的代码不起作用。 为了更好地展示它,我在下面添加了一张我正在计划的图片。 enter image description here
【问题讨论】:
我将假设这两个数据框具有相同的列标题,因为它们具有相同的列数。如果这个假设是错误的,你可以纠正我。我会绘制出列名,然后从 df2 中的所有值中减去 df2 中列的值。
library(tidyverse)
#example data
df1 <- mtcars
df2 <- mtcars[1,] |>
mutate(across(everything(), ~ . + runif(n = 1, min = -10, max = 10)))
#solution
colnames(df1) |>
map_dfc((x){
val <- pull(df2, !!sym(x))
df1 |>
select(!!sym(x)) |>
mutate(!!quo(!!sym(x)) := !!sym(x) - val) |>
as_tibble()
})
#> # A tibble: 32 x 11
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 -5.87 7.11 -8.99 -2.41 8.10 4.92 0.908 -2.14 2.85 -1.07 8.76
#> 2 -5.87 7.11 -8.99 -2.41 8.10 5.17 1.47 -2.14 2.85 -1.07 8.76
#> 3 -4.07 5.11 -61.0 -19.4 8.05 4.62 3.06 -1.14 2.85 -1.07 5.76
#> 4 -5.47 7.11 89.0 -2.41 7.28 5.51 3.89 -1.14 1.85 -2.07 5.76
#> 5 -8.17 9.11 191. 62.6 7.35 5.74 1.47 -2.14 1.85 -2.07 6.76
#> 6 -8.77 7.11 56.0 -7.41 6.96 5.76 4.67 -1.14 1.85 -2.07 5.76
#> 7 -12.6 9.11 191. 133. 7.41 5.87 0.288 -2.14 1.85 -2.07 8.76
#> 8 -2.47 5.11 -22.3 -50.4 7.89 5.49 4.45 -1.14 1.85 -1.07 6.76
#> 9 -4.07 5.11 -28.2 -17.4 8.12 5.45 7.35 -1.14 1.85 -1.07 6.76
#> 10 -7.67 7.11 -1.39 10.6 8.12 5.74 2.75 -1.14 1.85 -1.07 8.76
#> # ... with 22 more rows
【讨论】: