R 应用对一系列列中相邻列的值进行评分的函数

R 应用对一系列列中相邻列的值进行评分的函数,r,mutate,custom-function,R,Mutate,Custom Function,我想应用一个函数,它计算相邻列中两个值的差值,并根据其中一个输入值对差值进行评分,然后应用到数据帧的一系列列中。分数将作为新列显示在用于计算的其中一列旁边。我写了一个函数,它可以处理单个向量/列,但是当我试图在一系列列上使用mutate_时,我被卡住了。 以下是我迄今为止所做的尝试: # data set.seed(123) df <-data.frame(d1= 20, d2= seq(20,15,-0.1)[1:50],

我想应用一个函数,它计算相邻列中两个值的差值,并根据其中一个输入值对差值进行评分,然后应用到数据帧的一系列列中。分数将作为新列显示在用于计算的其中一列旁边。我写了一个函数,它可以处理单个向量/列,但是当我试图在一系列列上使用mutate_时,我被卡住了。 以下是我迄今为止所做的尝试:

# data
set.seed(123)
df <-data.frame(d1= 20,
                d2= seq(20,15,-0.1)[1:50],
                d3= seq(20,15,-0.1)[1:50]+ rnorm(50,0,3))

# scoring function
f_score <- function(a,b){
  ifelse(a-b>=a*0.2,"high",
         ifelse(a*0.2>a-b & a-b>=a*0.15,"mid",
                ifelse(a*0.15>a-b & a-b>=a*0.1,"low","ok")))
}

# scoring function works for single columns
f_score(df$d1,df$d2) %>% setNames(round(df$d1-df$d2,2)) 

# and scoring function works this way,too 
f_score(df[,1:2],df[,2:3])

# I can easily do this
df1 <- mutate(df,score=f_score(d1,d2))
df1

# this comes close to what I want to achieve
df2 <- df %>% mutate_at(vars(names(.)[2:3]), .funs= funs(score= f_score(d1,.)))
df2
#but the second calculation should use the values from d2 instead of d1


#I would like to do something like this
df3 <- df %>% mutate_at(vars(names(.)[2:3]), .funs= funs(score=f_score(c(1:2),.)))
#but this is not working

# or 
df3 <- df %>% mutate_at(vars(names(.)[2:3]), .funs= funs(score=f_score(df[1:2],.)))


# I would like to end up with something like this
df4 <- mutate_at(df, vars(c(d2)), .funs= funs(score_d2= f_score(d1,.)))
df4 <- mutate_at(df4, vars(c(d3)), .funs= funs(score_d3= f_score(d2,.)))
df4 <- select(df4,d1,d2, score_d2, d3, score_d3)
#数据
种子集(123)
df a-b和a-b>=a*0.15,“中”,
ifelse(a*0.15>a-b&a-b>=a*0.1,“低”、“正常”))
}
#评分功能适用于单列
f_分数(df$d1,df$d2)%>%setNames(四舍五入(df$d1,df$d2,2))
#评分函数也是这样工作的
f_分数(df[,1:2],df[,2:3])
#我很容易做到这一点

df1为了澄清,你基本上想要
f_分数(d1,d2)
然后
f_分数(d2,d3)
以一种自动的方式?是的,我想这会奏效。为了澄清,你基本上想要
f_分数(d1,d2)
然后
f_分数(d2,d3)
以一种自动的方式?是的,我想这会奏效。