У меня есть фрейм данных:
df <- data.frame(A=c(10, 20, 30, 20),
B=c(0, 10, 20, 10),
C=c(11, 22, 21, 12),
D=c(13, 11, 33, 15))
A B C D
10 0 11 13
20 10 22 11
30 20 21 33
20 10 12 15
и функция для получения индекса числа в паре, ближайшей к интересующему числу:
comp <- function(x, y) {
# x = number of interest, y = vector of 2 numbers for comparison)
ind <- which(abs(y-x)==min(abs(y-x)))
if (length(ind)==2) {
ind <- 3
}
return(ind)
}
(Оператор if предназначен для случаев, когда число попало в середину двух чисел, например 15 по сравнению с 10 и 20).
Я хотел бы изменить столбцы C & D на индекс, для которого число является ближайшим, используя мою функцию (1 для A или 2 для B):
A B C D
10 0 1 1
20 10 1 2
30 20 2 1
20 10 2 3
Я не уверен, как вызывать столбцы A и B в качестве аргументов для функции. Я пытался mutate_at(df, 3:4, funs(comp), c(df$A, df$B))
, но это возвращает:
A B C D
10 0 3 6
20 10 3 6
30 20 3 6
20 10 3 6
Не должно быть решения для тидира, что бы ни работало!
Спасибо