применить функцию, которая оценивает значения соседних столбцов в диапазоне столбцов - PullRequest
1 голос
/ 19 сентября 2019

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

...