全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
5351 2
2014-12-04
        如题,直接上代码:
        complete=function(directory="specdata",id=1:332){
  files=list.files(directory,full.names=TRUE)
  nobs<- c()

  for(i in id){
    nobs[i]=sum(complete.cases(read.csv(files[i])))
  }
  nobs=na.omit(nobs)
  comp=data.frame(id,nobs)
  print(comp)
}
这段代码的意思就是根据id来对相应文件里面的完整个案进行计数,比如id为1:30,则函数输出的是一个数据框,第一列是id,第二列nobs对应是第1到第30个csv文件里的完整个案数目。那么问题来了:
       当我输入complete(directory="specdata",id=25:30),时,结果如下:
id nobs
1 25  463
2 26  586
3 27  338
4 28  475
5 29  711
6 30  932

        而id为30:25,时,结果如下:
id nobs
1 30  463
2 29  586
3 28  338
4 27  475
5 26  711
6 25  932

       可以看到无论id是25:30还是30:25,第二列nobs的值的顺序都是一样的,也就是说在第二个输出结果中,即使第一行id的值为30,其对应的nobs却仍然是第25个csv文件中完整个案的数目,求问为什么会出现这种情况?如何纠正呢?谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-12-4 14:47:27
很好理解的 那是因为nobs=sum(complete.cases(read.csv(files)))  这句话的意思是
无论id是顺还是逆,nobs作为向量,对应各个位置,nobs的值是不会变化的。
复制代码
这样写应该就好多了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-12-4 16:01:51
yywan0913 发表于 2014-12-4 14:47
很好理解的 那是因为nobs=sum(complete.cases(read.csv(files)))  这句话的意思是
无论id是顺还是逆,nobs ...
试了一下果然可以!谢谢解答!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群