![](/img/trans.png)
[英]R: How to create a new column in a data frame with “countif” values from another data frame?
[英]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.