创建一个嵌套for循环以在R中使用Scraping

时间:2013-02-19 22:39:37

标签: r loops nested-loops

我无法执行嵌套for循环来创建一个用于刮擦的词干列表。简单数据框包含2个变量,名称和照片数量。我希望代码吐出这样的词干/列表:

亚历/ 1 亚历克斯/ 2 亚历克斯/ 3 爱丽丝/ 1 .....

我可以在一次执行一行时让它工作但不幸的是我无法弄清楚如何通过所有名称的循环来完成它。

任何帮助都会受到超级赞赏,希望任何想要使用此结构抓取HTML的人都可以使用它!

以下是我的代码:

stems<-list()
for(Name in data$Names){
    for(Photo in data$Photos)
    stems[Photo]<-print(paste(Name,1:data$Photos,sep="/"))
}
stems.matrix<-as.matrix(stems)

2 个答案:

答案 0 :(得分:3)

这是你想要的吗?我知道你说你想要一个列表,但我认为一个字符向量也很容易。

#I'm guessing your data looks something like this...
data <- data.frame( Names = c("Simon" , "Alex" , "Ben", "Dave") , Photos = c( 4 , 3 , 2 , 3) , Misc = c( 4 , 3 , 4 , 4 ) )

#Use apply rather than nested loops
stem.list <- unlist( apply( data , 1 , function(x) { i <- 1:x[2]; paste( x[1] , i , x[3] , sep ="/") } ) )

这给了......

> stem.list
 [1] "Simon/1/4" "Simon/2/4" "Simon/3/4" "Simon/4/4" "Alex/1/3"  "Alex/2/3"  "Alex/3/3" 
 [8] "Ben/1/4"   "Ben/2/4"   "Dave/1/4"  "Dave/2/4"  "Dave/3/4" 

答案 1 :(得分:0)

 dat <- data.frame(name=letters[1:4],photo=1:4)
 dat.ex <- expand.grid(dat)
 paste(dat.ex[,1],dat.ex[,2],sep='/')
 [1] "a/1" "b/1" "c/1" "d/1" "a/2" "b/2" "c/2" "d/2" "a/3" "b/3" "c/3" "d/3" "a/4" "b/4" "c/4" "d/4"