繁体   English   中英

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

[英]R: Create a new column in a data frame using a mapping from another data frame

我有以下数据框。

> 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数据框的映射在temp中再添加一列,并使用与x2列中的相应国家/地区对应的货币。 像这样的东西应该是输出

> temp
  x1    x2  x3
1  1 INDIA INR
2  2 INDIA INR
3  3    US USD
4  4    US USD

我不想使用for循环,因为实际数据可能非常大,在这种情况下使用for循环效率很低。 有没有更好的方法来实现给定的输出?

提前致谢。

您可以使用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

这是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM