Для будущих постов, пожалуйста, рассмотрите комментарии выше относительно того, что представляет собой «хороший» минимальный и воспроизводимый пример.
Относительно вашего вопроса, как я уже сказал в моем комментарии выше, по сути это простое соединение /слияния;здесь tidydverse
опция
library(tidyverse)
DDA_File %>%
left_join(Ref_File, by = c("cnum" = "Cell.Num")) %>%
unite(SAP_Sec, NE_NAME.ACCESSIBILITY, Sector, sep = " - ") %>%
select(SAP_Sec, starts_with("X"))
# SAP_Sec X18.Dec.18 X19.Dec.18 X20.Dec.18 X21.Dec.18
#1 I-DL-BADQ-ENB-I001 - Alpha 98.06 95.73 98.66 98.66
#2 I-DL-BADQ-ENB-I001 - Beta 98.06 95.73 98.66 98.66
#3 I-DL-BADQ-ENB-I001 - Beta 45.76 56.54 53.41 67.27
#4 I-DL-BADQ-ENB-I001 - Gamma 45.76 56.54 53.41 67.27
#5 I-DL-BADQ-ENB-I001 - Gamma 93.17 96.37 87.67 89.75
#6 I-DL-BADQ-ENB-I001 - Alpha 93.17 96.37 87.67 89.75
#7 I-DL-BADQ-ENB-I001 - Alpha 98.46 98.42 92.36 97.59
#8 I-DL-BADQ-ENB-I001 - Beta 92.21 98.03 89.21 93.04
#9 I-DL-BADQ-ENB-I001 - Gamma 98.61 96.69 98.64 98.65
#10 I-DL-BADQ-ENB-I001 - Alpha 98.72 97.54 78.89 95.15
#...
Объяснение: Мы соединяем DDA_File
и Ref_File
слева, сопоставляя DDA_File$cnum
и Ref_File$Cell.Num
и объединяя DDA_File$NE_NAME.ACCESSIBILITY
с совпадающими значениями Ref_File$Sector
;мы наконец выбираем те столбцы, которые вы показываете в ожидаемом результате.
Или то же самое в базе R, используя merge
df.new <- transform(
merge(DDA_File, Ref_File, by.x = "cnum", by.y = "Cell.Num"),
SAP_Sec = paste(NE_NAME.ACCESSIBILITY, Sector, sep = " - "))
df.new[, c("SAP_Sec", names(df.new)[grep("^X", names(df.new))])]
Объяснение: На первом шаге мы merge
два набора данных и создать новый столбец SAP_Sec
;на последнем шаге мы выбираем соответствующие столбцы для воспроизведения ожидаемого результата.
Любой подход должен быть значительно быстрее (и, возможно, что более важно, намного чище), чем подход for
.