我有一个ID号和观察次数的数据集。我正在编写一个函数来根据用户选择的ID显示输出。数据集具有从1到332开始的ID及其相应的观察结果。
以下是我写的代码:
complete=function(directory,id=1:332){
directory=read.csv(paste(path,"complete.csv",sep=""),header=TRUE,sep=",")
as.data.frame.matrix(directory)
mydf=na.omit(directory)
library(plyr)
completecount=count(mydf$ID)
colnames(completecount)=c("ID","nobs")
as.data.frame.matrix(completecount)
complete=subset(completecount,select=c(ID,nobs),subset=(completecount$ID%in%id))
return(complete)
}
当我尝试运行此
时complete("specdata",4:2)
我希望根据上面的输入
按顺序查看输出 ID nobs
2 4 474
3 3 243
4 2 1041
然而,我看到订单中的输出如下所示
ID nobs
2 2 1041
3 3 243
4 4 474
请告知我的代码有什么问题。
感谢您的帮助!
答案 0 :(得分:2)
您的功能中没有任何内容可以确保任何订单。我不确定你是否认为%in%
运算符也进行了排序,但事实并非如此。无论第二个参数的顺序如何,它都会返回值。返回行的顺序是它们在原始表中的顺序。
与%in%
不同,match()
实际上按顺序返回值。你可以做点什么
library(plyr)
complete=function(directory,id=1:332){
directory=read.csv(paste(path,"complete.csv",sep=""),header=TRUE,sep=",")
as.data.frame.matrix(directory)
mydf=na.omit(directory)
completecount=count(mydf$ID)
colnames(completecount)=c("ID","nobs")
as.data.frame.matrix(completecount)
return(completecount[match(id, completecount$ID), ])
}
这将按照它们传递给函数的顺序从completecount
中抽取行。