【发布时间】:2016-03-06 18:08:52
【问题描述】:
我想将多个向量合并到一个数据框中。有两个变量 city 和 id 将用于将向量与数据框匹配。
df <- data.frame(array(NA, dim =c(10*50, 2)))
names(df)<-c("city", "id")
df[,1]<-rep(1:50, each=10)
df[,2]<-rep(1:10, 50)
我创建了一个这样的数据框。对于这个数据框,我想合并 50 个向量,每个向量对应 50 个城市。问题是每个城市只有6个obs。每个城市将有 4 个 NA。
举个例子,城市 1 的数据如下所示:
seed(1234)
cbind(city=1,id=sample(1:10,6),obs=rnorm(6))
我有 50 个城市数据,我想将它们合并到 df 中的一列。我试过以下代码:
for(i in 1:50){
citydata<-cbind(city=i,id=sample(1:10,6),obs=rnorm(6)) # each city data
df<-merge(df,citydata, by=c("city", "id"), all=TRUE)} # merge to df
但如果我运行它,循环会显示如下警告:
In merge.data.frame(df, citydata, by = c("city", "id"), ... :
column names ‘obs.x’, ‘obs.y’ are duplicated in the result
它将创建 50 列,而不是一长列。
如何将cbind(city=i,id=sample(1:10,6),obs=rnorm(6)) 与df 合并到一个又好又长的列中?看来cbind 和merge 都不是办法。
如果有 50 个 citydata(每个有 6 行),我可以将 rbind 作为一个长数据并使用 data.table 方法或 expand.gird+merge 方法作为 Philip 和 Jaap 建议。
我想知道我是否可以通过一个循环将每个citydata一个一个地合并,而不是rbind他们合并到df。
【问题讨论】: