首页 > 解决方案 > 将数据帧的特定部分与两个条件 r 相乘

问题描述

我有一个看起来像这样的数据集,称为Data

Country Region      Code Product name Year Value
Sweden  Stockholm   123  Apple        1991 244   
Sweden  Kirruna     123  Apple        1987 100
Japan   Kyoto       543  Pie          1987 544
Denmark Copenhagen  123  Apple        1998 787
Denmark Copenhagen  123  Apple        1987 100
Denmark Copenhagen  543  Pie          1991 320
Denmark Copenhagen  126  Candy        1999 200
Sweden  Gothenburg  126  Candy        2013 300
Sweden  Gothenburg  157  Tomato       1987 150
Sweden  Stockholm   125  Juice        1987 250
Sweden  Kirruna     187  Banana       1998 310
Japan   Kyoto       198  Ham          1987 157
Japan   Kyoto       125  Juice        1987 550
Japan   Tokyo       125  Juice        1991 100

我想要做的是将value(销售)转换为欧元相对于特定countryyear. 为此,我有一个数据文件,其中包含特定的汇率countryyear(也已根据通货膨胀进行调整):

Exchange_rates <- read_excel("Data/Exchange_rates.xlsx", col_types = c("numeric", "text", "numeric")) #year, country, value

为了获得我需要的价值countryyear我使用以下代码:

Convert_exchage_rate <- function(Specific_Country, Specific_Year) {
    Specific_exchange_rate <- subset(Exchange_rates, Country == Specific_Country)
    Specific_exchange_rate <- subset(Specific_exchange_rate, Year == Specific_Year)
    Specific_exchange_rate <- as.matrix(Specific_exchange_rate[3]) #gets the specific rate for the specific year

    Data <- ??? * Specific_exchange_rate[1] #here comes my question 

}

Convert_exchage_rate("Sweden","1987")

我的问题是我不知道如何使用 R 仅将where和(以及上面的函数)中value的条目相乘。我知道如何将值列与 相乘,但现在如何有条件地使用两个条件。Data"Country == Sweden""Year = 1987"Specific_CountrySpecific_YearData$Value <- Data$Value * Specific_exchange_rate[1]

(稍后我将创建一个循环来在所有年份和所有国家/地区运行我的函数Data,但我不想编写这部分代码,直到我可以让它在特定年份在一个特定国家/地区工作)

标签: rdataframe

解决方案


在函数的注释行中,您可以执行

Data$Value[Data$Country == Specific_Country & Data$Year == Specific_Year] <-
Data$Value[Data$Country == Specific_Country & Data$Year == Specific_Year] * Specific_exchange_rate[1]

这应该很容易解释:您选择与您的 Specific_Country 和 Specific_Year 匹配的特定 Data$Value。

您可以通过执行以下操作来避免循环

Data <- merge(Data, Exchange_rates, by=c('Country','Year'))
Data$Value_in_eur <- Data$Specific_exchange_rate * Data$Value

推荐阅读