Умножить подмножество столбцов на значения во втором фрейме данных, используя совпадение в R - PullRequest
1 голос
/ 20 февраля 2020

У меня есть фрейм данных, который выглядит следующим образом

data <- read.table(text="
  Country A B
1 FRA     1 2
2 GER     2 1
", header=TRUE)

У меня есть фрейм справочных данных, который выглядит следующим образом

ref <- read.table(text="
  Names Values
1     A      5
2     B     10
", header=TRUE)

Я хочу умножить каждый столбец на соответствующую строку в Ссылка на то же имя (при сохранении ненумерованных c строк без совпадения)

результат должен быть таким

> result
  Country  A  B
1 FRA      5 20
2 GER     10 10

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Мы можем подставить интересующие столбцы («nm1»), умножить на реплицированные соответствующие «Значения» из «ref» после match, указав имена столбцов с помощью столбца «Names», и обновить эти столбцы

nm1 <- c("A", "B")
result <- data
result[nm1] <-data[nm1] * ref$Values[match(nm1, ref$Names)][col(data[nm1])]
result
#  Country  A  B
#1     FRA  5 20
#2     GER 10 10
0 голосов
/ 20 февраля 2020

Это тоже будет вариант. Это немного длинно, хотя и предложенный выше ответ может быть лучше.

library(tidyverse)
data <- data.frame(
  Country = c("FRA", "GER"),
  A = c(1,2),
  B = c(2,1)
)

ref <- data.frame(
  Names = c("A", "B"),
  Values = c(5, 15)
)

data %>% pivot_longer(cols = c(A,B), values_to = c("Value"), names_to = "Names") %>% 
left_join(ref, by = "Names") %>% 
mutate(New_Value = Value * Values) %>% 
select(-Value, -Values) %>% 
pivot_wider(names_from = Names, values_from = New_Value) 

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...