如何删除R数据帧中的行方式排序

时间:2015-08-20 03:20:00

标签: 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 个答案:

答案 0 :(得分:1)

我们可以将for(i in id)更改为for(i in seq_along(id)),以按照&#39; id&#39;的顺序循环播放。另外,在分配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

注意:值不同,因为&#39; specdata&#39;我拥有的目录来自之前的coursera链接。他们可能已经更新了数据