在R中以可推广的方式成对地突变几个函数



我的数据库中有两个名称向量(比如一个表示组件,第二个表示值(,我正试图开发一个函数,以可推广的方式基于这两个向量创建新列,例如:

#vector components and values contain column names from the dataset
creaYK<-function(data,Input="A",Components=c("A", "B", "C"),Values=c("D", "E", "F")){

for(i in 1:length(Values)){
data<-data%>%mutate(new_i = sum(Values[i],Components[i]))

}
}

我的问题是我需要我的论据";vec1";以及";vec2";在内容和长度上是可修改的,并且计算是成对执行的(vec1的每个元素与vec2中的相应元素相加(。我用across()做了一些尝试,但失败了。

这是想要的输出:

vec1<-c("A","B","C")
vec2<-c("D","E","F")
data<-tibble(A=1,B=2,C=3,D=4,E=5,F=6)
# what I want is a function returning :
# function(data,vec1,vec2)
tibble(A=1,B=2,C=3,D=4,E=5,F=6,ad=5,be=7,cf=9)

但上面的代码只创建了一个新列,我尝试使用mutate也没有成功

此外,指标名称的结构与所用值的名称不同

如果我理解正确,您可能需要

library(dplyr)
a <- c(2,5,6)
b <- c(4,9,6)
df <- as.data.frame(cbind(a,b))
tribble <- function(data,vec1,vec2){
sum_v1v2 <- vec1+vec2
a <- data %>% mutate(Sum_of_components = sum_v1v2)
}
b <- tribble(df,a,b)

输出:

a b Sum_of_components
1 2 4                 6
2 5 9                14
3 6 6                12

最新更新