如何解决dplyr将具有更改参数的单个函数应用于同一列
我有一个只有一列的简单df,并且我想使用一个函数(在此情况下为sum_x
)中仅更改一个参数就创建多个新列。有没有一种方法比我在下面的dplyr
中显示的方法更有效?理想情况下,我可以合并sum_vec
并在一行中创建100个新列。这似乎是一个非常简单的问题,但是我不知道如何使用dplyr
来有效地解决这个问题。
df <- data.frame(x = 1:20)
sum_x <- function(x,y){
x + y
}
sum_vec <- 1:100
df %>% mutate(x_1 = sum_x(x,1)) %>% mutate(x_2 = sum_x(x,2)) %>% mutate(x_3 = sum_x(x,3))
解决方法
尝试一下
library(tidyverse)
bind_cols(df,map_dfc(1:3,~ df %>% transmute(!!paste0("x_",.x) := x + .x)))
x x_1 x_2 x_3
1 1 2 3 4
2 2 3 4 5
3 3 4 5 6
4 4 5 6 7
5 5 6 7 8
6 6 7 8 9
7 7 8 9 10
8 8 9 10 11
9 9 10 11 12
10 10 11 12 13
11 11 12 13 14
12 12 13 14 15
13 13 14 15 16
14 14 15 16 17
15 15 16 17 18
16 16 17 18 19
17 17 18 19 20
18 18 19 20 21
19 19 20 21 22
20 20 21 22 23
,
如果您不喜欢for
循环,那么我与您同在。因此,我不确定这是否良好/有效。有兴趣寻求更好的解决方案。
library(dplyr)
for (i in 1:100) {
x_header = paste("x",i,sep = "_")
df = df %>%
mutate(!!x_header := sum_x(x,i))
}
> df[1:11,1:11]
x x_1 x_2 x_3 x_4 x_5 x_6 x_7 x_8 x_9 x_10
1 1 2 3 4 5 6 7 8 9 10 11
2 2 3 4 5 6 7 8 9 10 11 12
3 3 4 5 6 7 8 9 10 11 12 13
4 4 5 6 7 8 9 10 11 12 13 14
5 5 6 7 8 9 10 11 12 13 14 15
6 6 7 8 9 10 11 12 13 14 15 16
7 7 8 9 10 11 12 13 14 15 16 17
8 8 9 10 11 12 13 14 15 16 17 18
9 9 10 11 12 13 14 15 16 17 18 19
10 10 11 12 13 14 15 16 17 18 19 20
11 11 12 13 14 15 16 17 18 19 20 21
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。