我有一个名为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
和country
将year
(销售)转换为欧元。为此,我有一个数据文件,该文件是使用特定country
和year
(也已根据通胀调整)的汇率制作的:
Exchange_rates <- read_excel("Data/Exchange_rates.xlsx", col_types = c("numeric", "text", "numeric")) #year, country, value
要获得country
和year
所需的值,请使用以下代码:
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仅将value
和Data
({{1 }}和"Country == Sweden"
。我知道如何将how value列与"Year = 1987"
相乘,但是现在如何有条件地将其与两个条件相乘。
(稍后,我将循环运行Specific_Country
中所有年份和所有国家/地区的函数,但是我不想编写那部分代码,直到我可以让它针对特定的功能工作为止一个特定年份的国家/地区)
答案 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