结合Vector和数据帧

时间:2013-11-11 21:01:00

标签: r

我有1个数据框,其中包含国家/地区列表及其国家/地区代码。我希望能够在R中创建一个特定年份的国家年份文件。

所以国家/地区的数据框架似乎是

代码国家
2美国
20加拿大
31巴哈马

我想要

代码国家年份
2美国1945年 2美国1946年 2美国1947年 2美国1948年 20加拿大1945年 20加拿大1946年 20加拿大1947年 20加拿大1948年

这是一个简单的问题 - 但我花了一个小时没有运气,所以任何帮助都会受到赞赏。

谢谢!

2 个答案:

答案 0 :(得分:0)

df <- read.table(text="Code Country
2 'United States'
20 'Canada'
31 'Bahamas'", header=T)

year   <- 1945:2005
len    <- length(year)
code   <- rep(df$Code,    each=len)
ctry   <- rep(df$Country, each=len)
dframe <- data.frame(code=code, country=ctry, year=year)
rm(code, year, len, ctry, df)
dframe

答案 1 :(得分:0)

合并变量可以是你所追求的(我认为无论如何)看看下面的代码,看看它是否符合你的目标。

# replicate data
countries <- c(rep("United States",4),rep("Canada",4))
dates <- c("1945","1946","1947","1948","1945","1946","1947","1948")

dates.country <- as.data.frame(cbind(countries,dates))

code.country <- as.data.frame(matrix(c("2","United States","20","Canada","31","Bahamas"),ncol=2, byrow = TRUE))

# set names for code.country
# variables to be merge on variable names must match

names(code.country) <- c("code","countries")

# this form of merge replicates what you want
combined.country <- merge(dates.country,code.country)

# there are a lot of options for merge so it is worth looking at
# ?merge to get and idea of what it can do. For example adding the 
# all=TRUE flag will mean that all data is represented even if it
# is only in one dataset

combined.country.all <- merge(dates.country,code.country, all=TRUE)