我编写了以下代码来绑定两列并创建数据框。
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禁用自动排序?
答案 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链接。他们可能已经更新了数据