2016-09-08 7 views
-1

期間内の頻度をカウントすることは可能ですか?例データ:期間内の頻度

ID = c(1,2,3) 
N = c(4, 3, 3) 
Period = a = c("?", "?", "?") 
Freq = c(2.5, 1.3, 3.3) 
b <- data.frame(ID, z = N, a = Period, y = Freq) 

私は降順の日付を並べ替えると、一定の期間をカウントする必要がありますが、私はそれを行うにはどのよう見当がつかない最初gues:

ID=c(1,1,1,1,2,2,2,3,3,3) 
Dates <- c("2004-01-01", "2008-10-01", "2001-01-01", "2011-04-01", 
    "2013-05-01", "2014-08-01", "2009-03-01", "2001-12-01", "2003-04-01", "2011-05-01") 
a <- data.frame(ID, Dates) 

私はこのような何かを達成したいと思います。

+5

「?」とは何ですか? 'Freq'を計算するロジックは何ですか?あなたが望んだことは明確ではない – akrun

+0

"?"と "Freq"は私が数えたくないものです。例えば、ID = 1は、期間10年で4回です。 –

+0

私は 'N'を理解していると思いますが、期間またはフリークエンシーのロジックを見つけることができませんでした – akrun

答えて

1

あなたは、限り、あなたはあなたのDates変数がas.Dateに設定されていることを確認してくださいとしての日に、すなわちa$Dates <- as.Date(a$Dates)maxminを使用することができます。あなたが想像することができるように、max(Dates) - min(Dates)を減算すると、日数の範囲がわかります。 365で四捨五入すると、その日は何年にも変換されます。

libary(dplyr) 
a %>% 
    group_by(ID) %>% 
    summarise(N = n(), Period = as.integer(round((max(Dates)-min(Dates))/365)), Freq = Period/N) 

# A tibble: 3 × 4 
#  ID  N Period  Freq 
# <dbl> <int> <int> <dbl> 
#1  1  4  10 2.500000 
#2  2  3  5 1.666667 
#3  3  3  9 3.000000 

Freq値が一致していないが、それは、丸めエラーの可能性があります。 floorceilingなどの関数(もちろんround)を使用して丸めを調整することができます。