Я использую данные, аналогичные тем, которые вы опубликовали:
RH = structure(list(`160143` = c(24.9, 10.6, 17.7, 39.2, 23.1, 27.7),
`161143` = c(26.4, 29.4, 30.7, 38.6, 23, 28.1),
`161144` = c(27.4, 29.3, 30.7, 41, 27.9, 38.5),
`161145` = c(28.5, 29.5, 31.7, 37.5, 29.9, 40.7),
`161146` = c(30.4, 30.3, 31.5, 29, 38.2, 50.8),
`162145` = c(29.2, 29.7, 29.4, 31.1, 29.6, 43.3),
`162146` = c(32.6, 33, 34.1, 36.4, 41.4, 56.7),
`162147` = c(58.7, 68.2, 65, 56.4, 88.2, 106.6),
`163146` = c(50.6, 53.2, 48, 89.7, 86, 72.5),
`163147` = c(62.1, 82.3, 78.5, 83.9, 91.2, 94.2)),
class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6"))
percentage = structure(list(xy = c("160143", "161143", "107167", "107168", "107169", "108167"),
perc = c(50.22337, 29.69779, 41.98815, 66.68095, 37.67827, 29.69238)),
row.names = c("1", "2", "3", "4", "5", "6"), class = "data.frame")
Использование решения tidyverse
, которое использует некоторую форму и затем соединяет соответствующие значения:
library(tidyverse)
RH %>%
mutate(id = row_number()) %>%
gather(xy, value, -id) %>%
inner_join(percentage, by="xy") %>%
mutate(value = value * perc) %>%
select(-perc) %>%
spread(xy, value) %>%
select(-id)
# 160143 161143
# 1 1250.5619 784.0217
# 2 532.3677 873.1150
# 3 888.9536 911.7222
# 4 1968.7561 1146.3347
# 5 1160.1598 683.0492
# 6 1391.1873 834.5079
Обратите внимание , что конечным результатом будет таблица с тем же числом строк и столбцов, что и у вашего начального набора данных RH
.Здесь у него меньше столбцов, потому что только те 2 столбца были сопоставлены с набором данных percentage
, который вы опубликовали.