R 应用对一系列列中相邻列的值进行评分的函数
我想应用一个函数,它计算相邻列中两个值的差值,并根据其中一个输入值对差值进行评分,然后应用到数据帧的一系列列中。分数将作为新列显示在用于计算的其中一列旁边。我写了一个函数,它可以处理单个向量/列,但是当我试图在一系列列上使用mutate_时,我被卡住了。 以下是我迄今为止所做的尝试: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],
# 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)
以一种自动的方式?是的,我想这会奏效。