运行该功能时,输出顺序与顺序不匹配

时间:2014-06-07 04:17:51

标签: r

我有一个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

请告知我的代码有什么问题。

感谢您的帮助!

1 个答案:

答案 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中抽取行。