Я хотел бы применить функцию, которая вычисляет разницу двух значений из соседних столбцов и оценивает разницу на основе одного из входных значений, для диапазона столбцов информационного кадра.Кричащий счет отображается в виде нового столбца рядом с одним из столбцов, который использовался для расчета.Я написал функцию, которая выполняет работу для отдельных векторов / столбцов, но я застрял, когда попытался использовать эту функцию с mutate_at для диапазона столбцов.Вот что я попробовал до сих пор:
# 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)
Я совершенно новичок в R и SO, и я надеюсь, что смогу решить мою проблему.Любая помощь и объяснение проблемы с моим кодом высоко ценится.