gpt4 book ai didi

r - 在 dplyr 中按向量划分选定的列

转载 作者:行者123 更新时间:2023-12-03 17:04:30 26 4
gpt4 key购买 nike

这在基础 R 中必须很简单,但它让我对 dplyr 发疯(这总体上让我的生活变得更好!)。
假设你有以下小标题

library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union



df1 <- tibble(x=seq(5)*19, a1=seq(5)*1, a2=seq(5)*2, a3=seq(5)*4)

df1
#> # A tibble: 5 x 4
#> x a1 a2 a3
#> <dbl> <dbl> <dbl> <dbl>
#> 1 19 1 2 4
#> 2 38 2 4 8
#> 3 57 3 6 12
#> 4 76 4 8 16
#> 5 95 5 10 20


df2 <- tibble(b1=3, b2=0.5, b3=10)

df2
#> # A tibble: 1 x 3
#> b1 b2 b3
#> <dbl> <dbl> <dbl>
#> 1 3 0.5 10

创建于 2020-06-11 由 reprex package (v0.3.0)

然后我只想用 a1/b1 替换 df1 a1,用 a2/b2 替换 a2,依此类推。
当我有很多列时,这必须足够通用才能处理这种情况。
任何建议表示赞赏。

最佳答案

您可以使用 rowwise()c_across()

df1 %>%
rowwise() %>%
mutate(c_across(a1:a3) / df2, .keep = "unused") %>%
ungroup()

# # A tibble: 5 x 4
# x b1 b2 b3
# <dbl> <dbl> <dbl> <dbl>
# 1 19 0.333 4 0.4
# 2 38 0.667 8 0.8
# 3 57 1 12 1.2
# 4 76 1.33 16 1.6
# 5 95 1.67 20 2

另一个基本的 R 选项
df1[-1] <- t(t(df1[-1]) / unlist(df2))
df1

# # A tibble: 5 x 4
# x a1 a2 a3
# <dbl> <dbl> <dbl> <dbl>
# 1 19 0.333 4 0.4
# 2 38 0.667 8 0.8
# 3 57 1 12 1.2
# 4 76 1.33 16 1.6
# 5 95 1.67 20 2

关于r - 在 dplyr 中按向量划分选定的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62324107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com