我有以下数据框。
> temp
x1 x2
1 1 INDIA
2 2 INDIA
3 3 US
4 4 US
> PortfolioIndices
Country Index CCY
1 INDIA CNX50 INR
2 US SP500 USD
3 UK FTSE100 GBP
我想使用PortfolioIndices数据框中的映射,使用与x2列中各个国家/地区对应的货币向temp添加一列。这样的东西应该是输出
> temp
x1 x2 x3
1 1 INDIA INR
2 2 INDIA INR
3 3 US USD
4 4 US USD
我不想使用for循环,因为实际数据可能非常大,在这种情况下使用for循环效率非常低。有没有更好的方法来实现给定的输出?
提前致谢。
答案 0 :(得分:4)
您可以使用merge
:
> merge(temp, PortfolioIndices, by.x = "x2", by.y = "Country")
x2 x1 Index CCY
1 INDIA 1 CNX50 INR
2 INDIA 2 CNX50 INR
3 US 3 SP500 USD
4 US 4 SP500 USD
答案 1 :(得分:0)
这是一个data.table方法,推荐用于大表。
require(data.table)
# I imagine you have your data in data.frames.
temp <- data.frame(x1 = c(1:4), x2 = c("INDIA", "INDIA", "US", "US"))
PortfolioIndices <- data.frame(Country = c("INDIA", "US", "UK"),
Index = c("CNX50", "SP500", "FTSE100"),
CCY = c("INR", "USD", "GBP"))
# Coerce your data to data.table objects (they are still data.frames) and use the J()
# function
temp <- as.data.table(temp)
PortfolioIndices <- as.data.table(PortfolioIndices)
setkey(temp, x2)
setkey(PortfolioIndices, Country)
PortfolioIndices[temp, list(x1,Index,CCY),]
# Country x1 Index CCY
# 1: INDIA 1 CNX50 INR
# 2: INDIA 2 CNX50 INR
# 3: US 3 SP500 USD
# 4: US 4 SP500 USD