Как упоминает @Gregor с помощью языка SQL, сохраните данные индикатора в справочной таблице , а затем merge
в исходной таблице в соотношении один-ко-многим, которое масштабируется до 26 или 260 элементов:
species_vis_df <- data.frame(species = c("Tyto alba", "Branta leucopsis", "Ciconia nigra",
"Grus grus", "Bubo bubo", "Neophron percnopterus",
"Platalea leucorodia"),
value = c(0.0502 , 0.044, 0.002, 0.001,
0.004513, 0.0015333, 0.001))
В качестве альтернативы. в табличном формате:
txt = 'species value
"Tyto alba" 0.0502
"Branta leucopsis" 0.044
"Ciconia nigra" 0.002
"Grus grus" 0.001
"Bubo bubo" 0.004513
"Neophron percnopterus" 0.0015333
"Platalea leucorodia" 0.001'
species_vis_df <- read.table(text = txt, header=TRUE)
species_vis_df
# species value
# 1 Tyto alba 0.0502000
# 2 Branta leucopsis 0.0440000
# 3 Ciconia nigra 0.0020000
# 4 Grus grus 0.0010000
# 5 Bubo bubo 0.0045130
# 6 Neophron percnopterus 0.0015333
# 7 Platalea leucorodia 0.0010000
Затем запустите merge
, специально для повторного заимствования SQL, объедините left join
с all.x=TRUE
, чтобы сохранить все исходные строки независимо от совпадений со второй таблицей. Затем сделайте необходимое присваивание (NA
значения для несоответствий) и удалите искомое значение:
bird <- within(merge(bird, species_vis_df, by="species", all.x=TRUE), {
VIS <- value
rm(value)
})