2015-08-20 66 views
1

我編寫了以下代碼來綁定兩列並創建一個數據框。如何刪除R數據框中的行明智排序

complete<-function(directory,id){ 
    x<-vector() 
    y<-vector() 
    files<-list.files(directory,full.names=TRUE) 
    for(i in id){ 
    x[i]<-i 
    y[i]<-sum(complete.cases(read.csv(files[i]))) 
    } 
    d<-na.omit(data.frame(x,y)) 
    colnames(d)<-c("id","nobs") 
    rownames(d)<-1:nrow(d) 
    print(d) 
} 

我有以下的測試案例:

complete("specdata",30:25) 
    id nobs 
1 25 463 
2 26 586 
3 27 338 
4 28 475 
5 29 71 
6 30 932 

我不能夠獲得通過函數調用的順序輸出。即 id = 30作爲第一個值,id = 25作爲最後一個值。我如何得到通過ID禁用自動排序?

回答

1

我們可以將for(i in id)更改爲for(i in seq_along(id))以按照'id'的順序循環。此外,在分配x[i]y[i]時進行一些必要的更改。

complete<-function(directory, id){ 
    x<- vector() 
    y<- vector() 
    files<-list.files(directory,full.names=TRUE) 
    for(i in seq_along(id)){ 
    x[i]<- id[i] 
    y[i]<-sum(complete.cases(read.csv(files[id[i]]))) 
} 
d<-na.omit(data.frame(x,y)) 
colnames(d)<-c("id","nobs") 
rownames(d)<-1:nrow(d) 
print(d) 
} 

測試

complete('specdata', 25:30) 
#id nobs 
#1 25 4 
#2 26 0 
#3 27 1 
#4 28 1 
#5 29 2 
#6 30 13 


complete('specdata', 30:25) 
# id nobs 
#1 30 13 
#2 29 2 
#3 28 1 
#4 27 1 
#5 26 0 
#6 25 4 

注:該值是不同的,因爲 'specdata' 目錄下,我已經是從以前的coursera鏈接。他們可能已經更新了數據