簡體   English   中英

通過子數據迭代

[英]in R iterating through subsetted data

我正在嘗試給課程生分配作業,所以這是家庭作業。 我希望有人能解釋為什么我在做什么不起作用。 我有一個名為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

等等,對於ID為1到332的332個不同集合。我已經“找到”了記錄已完成的實例,並且必須返回數據來自哪個集合以及指定集合中有多少個完整數據集(按ID)我正在嘗試使用:

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

數據如果我使用一組數據調用該函數,它似乎可以正常工作:給我以下信息:

      id nobs
[1,]  1  117

但是嘗試將其應用於id <-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的大小。 這更清楚嗎?

您的問題在於子數據的設置方式,為了指定列ID應該是迭代器值所引用的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM