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