在R中迭代子集化数据

时间:2015-01-08 20:52:30

标签: r

我正在尝试为courser做作业,所以这是作业。我希望有人会解释为什么我在做什么不起作用。 我有一个名为complete_cases的数据框,我必须报告指定的'中有多少条记录。来自更大的集合的观察结果' 数据格式为:

              Date sulfate nitrate ID
279 2003-10-06    7.21   0.651  1
285 2003-10-12    5.99   0.428  1
291 2003-10-18    4.68   1.040  1
297 2003-10-24    3.47   0.363  1
303 2003-10-30    2.42   0.507  1
315 2003-11-11    1.43   0.474  1

依此类推332个不同的套装,ID为1到332.我已找到'记录完成的实例,必须返回数据来自哪个集合以及指定集合中有多少完整数据集(按id) 我正在尝试使用:

for (i in id){
   list <- nrow(complete_cases[i])
   data<-cbind(id = i,  nobs= list)
  }    

数据 如果我使用一组数据调用该函数,它似乎工作正常: 给了我:

      id nobs
[1,]  1  117

但是尝试将它应用于id&lt; - c(2,4,8,10,12)会给我一个错误:

Error in `[.data.frame`(complete_cases, i) : undefined columns selected

所以我期待的是迭代将返回c(2,4,8,10,12)中每个id的行数,并返回每个id的id和大小。这更清楚了吗?

1 个答案:

答案 0 :(得分:0)

您的问题在于您对数据进行子集化的方式,为了指定列ID应该是迭代器值引用的列,您必须更具体。有很多方法可以做到这一点,这里有一个:

complete_cases[complete_cases$ID == i, ]

每次只使用data <- ...我的个人收藏,你也会写你的矢量,这不需要你指定最终集的维度,如下所示:

data_summary <- vector("list")
k <- 1
for (i in id){
   current_id_rowcount <- nrow(complete_cases[complete_cases$ID == i, ])
   data_summary[[k]] <-cbind(id = i,  nobs=current_id_rowcount)
   k <- k + 1
}    
final <- do.call(rbind, data_summary)
相关问题