2015-01-08 80 views
1

我正在嘗試爲courser分配,所以這是作業。我希望有人會解釋爲什麼我所做的不起作用。in R遍歷子集數據

   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 

等: 我有一個數據幀稱爲complete_cases我必須報到多少條記錄中有規定,從一個更大的「設置」 的數據格式中的「設置」觀察對於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 < - 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。這更清楚嗎?

+0

語法DF [I]選擇的第i行,所以我的猜測是,你正在試圖選擇一個不存在的列索引。 – mlegge

+0

抱歉不清楚。函數被稱爲函數(data,id),其中id是c(2,4,8,10,12),表示數據的子集 – user1478335

+1

對於如何爲數據框的特定子集建立索引,我仍然有點困惑 - 你能提供更多的代碼嗎?一個玩具數據集也是可取的 – mlegge

回答

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) 
+0

正是我需要的。如你所說,先前的建議覆蓋了,但仍然比我實現的要好得多。所以,謝謝你們兩位 – user1478335