2016-12-05 45 views
-1

請問我有以下數據框。需要幫助刪除不一致的行

從數據框中,我的目標是移除3個月後不會進行的Intake。這是攝入日期與3個月之間的差異應該一致。

第一環路代碼用於生成D1,D2,D3如下所示

for (i in 2:(length(MyPanelBMIn3[,"UIDhmis"]))) { 
if ((MyPanelBMIn3[i,"UIDhmis"]== MyPanelBMIn3[(i-1),"UIDhmis"]) & MyPanelBMIn3[i, "Freq"] == MyPanelBMIn3[i-1, "Freq"]) { 
MyPanelBMIn3[i,"dd1"] <- MyPanelBMIn3[i,"Date2"]- MyPanelBMIn3[i-1, "Date2"] 
MyPanelBMIn3[i,"dd2"] <- MyPanelBMIn3[i,"Date2"]- MyPanelBMIn3[i+1, "Date2"] 
MyPanelBMIn3[i,"dd3"] <- MyPanelBMIn3[i-1,"Date2"]- MyPanelBMIn3[i+1, "Date2"]  
} else 
if ((MyPanelBMIn3[i,"UIDhmis"]== MyPanelBMIn3[(i-1),"UIDhmis"]) & MyPanelBMIn3[i, "Freq"] != MyPanelBMIn3[i-1, "Freq"]){ 
MyPanelBMIn3[i,"dd1"] <- MyPanelBMIn3[i,"Date2"]- MyPanelBMIn3[i-1, "Date2"] 
MyPanelBMIn3[i,"dd2"] <- MyPanelBMIn3[i,"Date2"]- MyPanelBMIn3[i+1, "Date2"] 
} 
} 

DATA:

UIDhmis CID Freq Date Index d1 d2 d3 
1 100 Intake 22/09/2014 1 NA NA NA 
1 100 Intake 16/04/2012 2 -889 -85 804 
1 100 03 Month 10/07/2012 3 85 -84 NA 
2 214 Intake 02/09/2013 1 NA NA NA 
2 214 Intake 05/04/2013 2 -150 -241 -91 
2 214 03 Month 02/12/2013 3 241 -90 NA 
3 301 Intake 03/11/2015 1 NA NA NA 
3 301 Intake 15/02/2015 2 -261 -359 -98 
3 740 03 Month 09/02/2016 3 359 -6 NA 

下面是用來比較D1中的代碼,d2和d3是能夠確定在第一個和第二個「攝入量」之間哪條線落下,我遇到下面給出的絕對值上的誤差

for (i in 2:(length(MyPanelBMIn5[, "UIDhmis"]))) { 
if ((MyPanelBMIn5[i, "UIDhmis"] == MyPanelBMIn5[(i-1), "UIDhmis"]) &   MyPanelBMIn5[i, "Freq"] == MyPanelBMIn5[(i-1), "Freq"] & abs(MyPanelBMIn5[i-1, "d1"]) > 100 & abs(MyPanelBMIn5[i, "d2"]) <= 100) { 
MyPanelBMIn6 <- with(MyPanelBMIn5, MyPanelBMIn5$UIDhmis != i-1) 
}else 
if ((MyPanelBMIn5[i, "UIDhmis"] == MyPanelBMIn5[i+1, "UIDhmis"]) & MyPanelBMIn5[i, "Freq"] == MyPanelBMIn5[i+1, "Freq"] & abs(MyPanelBMIn5[i+1, "d1"]) < abs(MyPanelBMIn5[(i+1), "d2"])) { 
    MyPanelBMIn6 <- with(MyPanelBMIn5, MyPanelBMIn5$UIDhmis != i) 
}else if 
((MyPanelBMIn5[i, "UIDhmis"] == MyPanelBMIn5[(i+1), "UIDhmis"]) &   MyPanelBMIn5[i, "Freq"] == MyPanelBMIn5[(i+1), "Freq"] & abs(MyPanelBMIn5[i, "d1"]) > 100 & abs(MyPanelBMIn5[i, "d2"]) > 100 & abs(MyPanelBMIn5[i, "d3"]) <= 100) { 
    MyPanelBMIn6 <- with(MyPanelBMIn5, MyPanelBMIn5$UIDhmis != i) 
} 
} 

錯誤消息: 錯誤在ABS(MyPanelBMIn5 [I - 1,「D1」): 非數字參數的數學函數

目的是3個月到「03月」中除去攝入量是不。例如,我想從UIDhmis = 100中刪除第1行,因爲這個觀察距離它的「03個月」很遠。

在UIDhmis = 214中,第二個「攝入量」必須被移除,因爲它是大約五個月到「03個月」的頻率。

有人可以幫助找到我的錯誤是什麼或告訴我如何在R更好地做到這一點。我使用R版本3.3.2與Windows 7專業版。

謝謝。

回答

0

查找所有「03月」情況下,行索引

rowids <- which(MyPanelBMIn5$CID == '03 Month') 

在他們面前,然後創建包括這些行以及該行的矢量

rowids <- c(rowids, rowids - 1) 

確保每個指標都是獨特的,大於0

rowids <- sort(unique(rowids)) 
rowids <- rowids[rowids > 0] 

然後,通過此索引子集您的原始數據集

data_subset <- MyPanelBMIn6[rowids, ]