在R中动态地将一个数据帧附加到另一个数据帧

时间:2017-04-21 15:14:01

标签: r rbind

我有数据帧(dataframexml),它有3个列 - 名称,路径和URL以及多行。基于URL,我在R中解析XML并使用getdataframe()函数创建数据帧。基于URL的数量,将生成许多数据帧。 (所有数据帧都有相同的列)

现在我需要为每个数据帧添加一个新列,该数据帧将在所有行中包含数据帧名称,并在另一个数据帧上附加动态创建主数据帧。 这是我被卡住的部分。寻求一些指导。

代码:

for (i in 1:nrow(dataframexml)){

dataURL<- dataframexml[i,3]

dataURL.response<-GET(dataURL,authenticate("string","xxxxx"))

assign(paste("df",substr(dataframexml[i,3],85,100),sep=""),
getdataframe(dataURL.response))
# getdataframe() = A function to create dataframe from the URL

# parts stuck 
# "1st <- create a new column which will have dataframe name in all rows"
# "2nd" <- append one dataframe over another and create a master dataframe 

print(paste("df",substr(dataframexml[i,3],85,100),sep=""))
# For Testing
}

1 个答案:

答案 0 :(得分:0)

这是在循环中执行此操作的一种方法。基本上,您在循环之前创建一个空对象,它将用于存储结果。然后,在循环中,使用cbind添加名称,最后使用rbind将所有结果添加到另一个结果之上。

dataframexml <- data.frame(name=c("a","b"),url=c("http1","http2"))

res <- NULL #create empty object
for (i in 1:nrow(dataframexml)){

name_loop <- dataframexml[i,"name"]
getdataframe_result <- data.frame(col1=runif(2),col2=runif(2))
getdataframe_result_with_name <- cbind(name_loop,getdataframe_result)
res <- rbind(res,getdataframe_result_with_name)
}

> res
  name_loop     col1      col2
1         a 0.267059 0.4765398
2         a 0.730072 0.4079391
3         b 0.131630 0.7102743
4         b 0.678059 0.0624137