2013-02-19 63 views
1

我無法執行一個嵌套for循環來創建一個用於刮擦的詞幹列表。簡單的數據框包含2個變量,名稱和照片數量。我想要的代碼吐出的列表/矩陣源於這樣的:創建一個嵌套for循環用於R刮

亞歷克斯/ 1 亞歷克斯/ 2 亞歷克斯/ 3 愛麗絲/ 1 .....

我能得到它在每次做一行時工作,但不幸的是我不知道如何通過所有名稱的循環來完成。

任何幫助將超級讚賞,並希望任何人都希望使用這種結構刮HTML!

這裏是我的代碼thusfar:

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) 

回答

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" 
+0

這就是它!謝謝你,西蒙! – abresler 2013-02-19 23:00:44

+0

這工作完美;我只是有一個補充 - 如果你想要另一個部分,這將最終結束西蒙/ 1/4,西蒙/ 2/4 ... – abresler 2013-02-19 23:23:44

+0

4從哪裏來?這是另一列中的另一個值嗎?所有人最後都有相同的價值,即'/ 4'還是不同的人呢?如果只是對每個人說4,只需添加到粘貼部分,所以'stem.list < - unlist(apply(data,1,function(x){i < - 1:x [2]; paste(x [1 ],i,4,sep =「/」)}))'如果它不同,並且該值來自數據框中的另一列(在本例中爲第三列),則使用'stem.list < - unlist(apply(data, 1,function(x){i < - 1:x [2]; paste(x [1],i,x [3] sep =「/」)}))' – 2013-02-19 23:49:29

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"