У меня есть набор данных, похожий на этот:
data= data.frame(a=c(33,44,55), b= c(99,77,NA,66),
var1=c(1,2,3,NA),var2=c(5,6,NA,7),var3=c(8,9,10,NA), x = c(6,5,4,3))
Мне нужно создать столбец, который возвращает для каждой строки значение среди столбцов var1, var2 и var3, которое ближе всего к столбцу x, игнорируя NA в var1: var3.
Что-то вроде:
closest_x
5
6
3
7
В моей реальной задаче у меня намного больше столбцов, чем это, поэтому я хотел бы использовать starts_with
, чтобы выбрать столбцы для сравнения с X(столбцы представлены как «var1» и т. д. выше).
Я попытался создать столбцы с модульной разницей между столбцом X и столбцами "var", затем я попробовал что-то вроде:
data %>% mutate(pmin = pmin(starts_with("var")))
или
mutate(data, C = pmin(starts_with("var")))
, а также
data %>% with(pmin(starts_with("var")))
Это говорит о том, что контекст переменной не установлен.Кроме того, было бы лучше, если бы мне не нужно было создавать много других переменных с этим модульным различием и перейти к ближайшему значению к столбцу X.
Я нашел очень близкие к тому, что янужно в этом посте: Ближайшее значение к конкретному столбцу в R
Однако я не знаю, как применить что-то похожее на мою проблему из-за того факта, что у меня есть еще много столбцови я хочу выбрать только те, которые начинаются с определенного слова.
РЕДАКТИРОВАТЬ: мне нужно, чтобы NA в переменных сравнивались с "х", чтобы игнорировать.