如何使用append和loop构造单个表?

时间:2014-04-03 13:08:59

标签: r loops append rbind

我在构造一个循环时遇到问题,它通过附加循环结果给我一个表。

现在它是水平追加列(变量)而不是垂直添加行。

也许追加不是正确的功能?或者有没有办法让它垂直追加? 或者也许我只是认为我正在制作一张桌子,但它实际上是其他一些结构?

我发现的解决方案使用了rbind,但我没有弄清楚如何使用rbind函数设置循环。

for (i in 1:3) {
  users.humansofnewyork = append(users.humansofnewyork, getPost( (humansofnewyork$id[i]) , token, n = 500, comments = TRUE,likes = TRUE, n.likes=500, n.comments=500))
}

非常感谢您的回复。不幸的是,没有一种解决方案有效。

这是完整的代码:

#start the libaries
library(Rfacebook)
library(Rook)
library(igraph)

#browse to facebook and ask for token
browseURL("https://developers.facebook.com/tools/explorer")

token <- "...copy and paste token"

#get Facebook fanpage "humansofnewyork" with post id
humansofnewyork <- getPage("humansofnewyork", token, n=500)

users.humansofnewyork = c()

for (i in 1:3) {
  users.humansofnewyork = append(users.humansofnewyork, getPost( (humansofnewyork$id[i]) , token, n = 500, comments = TRUE,likes = TRUE, n.likes=500, n.comments=500))
}

3 个答案:

答案 0 :(得分:1)

append用于向量。您应该使用cbindrbind的列式兄弟。 (我复制了你的代码;如果getPost在每次调用中没有返回相同长度的向量,则没有成功的承诺)

for (i in 1:3) {
  users.humansofnewyork = cbind(users.humansofnewyork, getPost( (humansofnewyork$id[i]) , token, n = 500, comments = TRUE,likes = TRUE, n.likes=500, n.comments=500))
}

答案 1 :(得分:0)

例如,您有数据:

data <- data.frame ("x" = "a", "y" = 1000)
data$x <- as.character (data$x)
data
  x    y
1 a 1000

并且您希望使用循环

附加带有新值的新行
for (i in 1:3) {  
  data <- rbind (data, c (paste0 ("Obs_",i), 10^i))  
}

所以它会给你:

data
      x    y
1     a 1000
2 Obs_1   10
3 Obs_2  100
4 Obs_3 1000

您只需要关注在c()

中引入新值的订单

答案 2 :(得分:0)

如果getPost的结果与users.humansofnewyork中的列具有相同的元素,则应该有效:

for (i in 1:3) {
  users.humansofnewyork[nrow(users.humansofnewyork) + 1, ] = getPost( (humansofnewyork$id[i]) , token, n = 500, comments = TRUE,likes = TRUE, n.likes=500, n.comments=500)
}

或者,使用rbind

for (i in 1:3) {
  users.humansofnewyork = rbind(users.humansofnewyork, getPost( (humansofnewyork$id[i]) , token, n = 500, comments = TRUE,likes = TRUE, n.likes=500, n.comments=500))
}

但如果users.humansofnewyork中的任何列都是factor并且任何新数据都包含新级别,则必须先添加新的因子级别,或将这些列转换为{ {1}}。

希望这会有所帮助。如果您提供了可重复的示例,它将对我们有所帮助。