2011-07-28 21 views
0

我有包含以下信息的數據幀回憶。如果計數從時間數據

ID.i == ID.(-i) 
ATTRIBUTE.i == ATTRIBUTE.(-i) 
END.i <= START.(-i) - 100 

其中(-i) := (j != i)

你能幫助我,發生召回?

謝謝!

對不起,不較早提供的數據 - 這裏是一些:

ID ATTRIBUTE START  END 
1  10   2000-01-01 2000-01-30 
1  10   2000-03-01 2000-04-30 
2  20   2000-01-01 2000-01-30 
2  21   2000-03-01 2000-04-30 
3  30   2000-01-01 2000-01-30 
3  30   2001-01-01 2000-01-30 
4  40   2000-01-01 2000-01-30 
4  40   2000-03-01 2000-04-30 
4  50   2000-06-01 2000-06-30 
4  40   2000-07-01 2000-10-30 
4  40   2001-01-01 2001-01-30 

應導致

ID ATTRIBUTE START  END   COUNT 
1  10   2000-01-01 2000-01-30 2 
1  10   2000-03-01 2000-04-30 2 
2  20   2000-01-01 2000-01-30 1 
2  21   2000-03-01 2000-04-30 1 
3  30   2000-01-01 2000-01-30 1 
3  30   2001-01-01 2000-01-30 1 
4  40   2000-01-01 2000-01-30 4 
4  40   2000-03-01 2000-04-30 4 
4  41   2000-06-01 2000-06-30 1 
4  40   2000-07-01 2000-10-30 4 
4  40   2001-01-01 2001-01-30 4 

(做的手 - 希望沒有錯誤)

+1

通過'.1'和'.2'你的意思行'i'與'1 + 1'的比較。即對於相鄰行,如果'ID' *和*'ATTRIBUTE'匹配**且** END和後續START之間的差異小於100? –

+0

感謝您的回答。我不一定是指2 = i + 1,而是任何其他行。我會用-i符號糾正這個問題 – speendo

+1

仍在等待樣本數據進行測試。 –

回答

2

東西一起這些線。未測試的在不存在樣品的數據:

aggregate(df, df$ID, df$ATTRIBUTE, 
     FUN= function(x) sum(sapply(1:(nrow(x)-1), 
           function(n)x$END[n] <= x$START[n+1] -100))) 

問題我仍然認爲可以存在用於上述代碼潛在如果參數數據幀是由START ID和屬性中第一排序的編輯後:

aggregate(df[ order(df$ID, DF$ATTRIBUTE, df$START), ] 
     df$ID, df$ATTRIBUTE, 
     FUN= function(x) sum(sapply(1:(nrow(x)-1), 
           function(n)x$END[n] <= x$START[n+1] -100))) 
2

您使用==<=沒有什麼意義,因爲左側的值是單個值,但右側的值是一個向量。我猜你想要測試的是ID是否與其他ID匹配。對於這一點,你可以使用

with(your_data, ID[i] %in% ID[-i]) 

爲了節省您的循環,雖然,我建議用duplicate功能拿起重複ID秒。例如,

bad_ID <- duplicated(your_data$ID) 

對於第三種情況,邏輯更加模糊。我(瘋狂地)猜測你想要END的值小於START減去100的所有其他值。

我們必須爲這個條件循環。

完整的邏輯是那麼

is_recall <- function(data) 
{ 
    bad_ID <- duplicated(your_data$ID) 
    bad_attr <- duplicated(your_data$ATTRIBUTE) 
    bad_end <- with(your_data, sapply(
    seq_len(nrow(your_data)), 
    function(i) END[i] < min(START[-i] - 100) 
)) 
} 
+0

免責聲明:沒有提供數據,而且有問題的邏輯含糊不清,所以存在很大的胡說八道的可能性。 –