У меня есть два разных фрейма данных в R. Первый, df1
, содержит данные для группы городов, каждый из которых связан с соответствующим состоянием.Второй содержит данные, агрегированные по состоянию, но разделяющие эти данные на несколько классов.Например:
states1 <- c("a", "a", "a", "a", "a", "b", "b", "b", "b", "c", "c", "d", "d", "d")
cities <- c("A","B","C","D","E","F","G","H","I","J","K","L","M","N")
data1 <- c(123, 222, 444, 125, 687, 987, 556, 445, 444, 659, 798, 113, 325, 144)
df1 <- data.frame(states1, cities, data1)
#
states2 <- c("a","a","b","b","c","c","d","d")
classes <- c(1,2,1,2,1,2,1,2)
data2 <- c(65,21,44,25,37,87,58,47)
df2 <- data.frame(states2, classes, data2)
Я хочу умножить столбцы данных из двух фреймов данных на основе определенных критериев, создав третий фрейм данных.Для каждого города я хочу умножить свои данные на данные соответствующего штата, создав два столбца, по одному для каждого класса.
Например:
Для городов A и B, которыепринадлежат к состоянию a, а K, принадлежащему состоянию c, мне нужно умножить их данные на данные соответствующих штатов и сделать это для каждого из классов 1 и 2. То есть я хочу умножить данные города наданные двух классов, используя соответствующие состояния в качестве моих критериев соответствия.вот так, например:
multA <- c(123*65, 123*21)
multB <- c(222*65, 222*21)
multK <- c(798*37, 789*87)
df3 <- data.frame(rbind(multA, multB, multK))
colnames(df3) <- c("class 1", "class 2")
Но, конечно, я хочу сделать это автоматически и для каждого города.Я пытался использовать функцию which
и пакет dplyr
, но пока не нашел решения.Есть ли способ сделать это без пакета или встроенной функции, без необходимости писать явный цикл?Спасибо !!