Я очень новичок в R
, так что простите меня, если это чрезвычайно простой вопрос. Используя приведенные ниже инструкции, я редактировал вопрос, чтобы, надеюсь, иметь больше смысла.Поиск и сопоставление в фреймах данных
У меня есть кадр d
данных, который выглядит, как этот
SAMPLE <-c("blueberry", "broccoli")
OPT1 <-c("apple", "beef")
OPT2 <-c("oatmeal", "bacon")
RESPONSE <- c("oatmeal", "beef")
d <- data.frame(SAMPLE,OPT1,OPT2, RESPONSE)
добавить столбец NA новых данных
d$OPT1.D <- rep("NA",nrow(d));
и расстояние матрицы dist
X <-c("blueberry", "beef", "oatmeal", "broccoli")
blueberry <-c("0", "0.17", "0.09", "0.21")
beef <-c("0.15", "0", "0.979", "0.75")
oatmeal <- c("0.09", "0.375", "0", "0.71")
broccoli <- c("0.25", "0.671", "0.45", "0")
dist <- data.frame(X,blueberry,beef, oatmeal, broccoli)
Так что я хочу найдите совпадение строк/столбцов в dist
для d$RESPONSE
и d$SAMPLE
. В новой колонке для d$OPT1.D
первая запись должна быть 0.09
, что является расстоянием между «овсяной мукой» и «голубикой» в dist
. Вторая запись должна быть 0.671
, расстояние между «говядиной» и «брокколи».
Надеюсь, что это имеет смысл? Я использовал код ниже, d$OPT1.D <- dist[cbind(d$RESPONSE, d$SAMPLE)]
, но он вернул текст, а не номер. Большое спасибо.
В целом это похоже, должно быть, довольно простая операция, но после поиска бит я не могу сказать, лучше ли это делать с помощью цикла или пакета FOR, например data.table. Совет будет оценен!
Благодарим за редактирование @RomanLustrik! – Aaron