数据帧的特定部分与两个条件r相乘

时间:2018-09-27 10:02:06

标签: r dataframe

我有一个名为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

我要针对特定​​的valuecountryyear(销售)转换为欧元。为此,我有一个数据文件,该文件是使用特定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仅将valueData({{1 }}和"Country == Sweden"。我知道如何将how value列与"Year = 1987"相乘,但是现在如何有条件地将其与两个条件相乘。

(稍后,我将循环运行Specific_Country中所有年份和所有国家/地区的函数,但是我不想编写那部分代码,直到我可以让它针对特定的功能工作为止一个特定年份的国家/地区)

1 个答案:

答案 0 :(得分:1)

您可以在函数的注释行中

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