R:使用来自另一个数据帧的映射在数据框中创建新列

时间:2014-01-19 15:07:31

标签: r

我有以下数据框。

> 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循环效率非常低。有没有更好的方法来实现给定的输出?

提前致谢。

2 个答案:

答案 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