[英]How do I count the number of observations at given intervals in R?
我有數據,包括每個觀察的小時,分鍾和秒的變量。 我想在凌晨3點之前計算觀測次數,在早上6點之前進行所有觀測,在上午9點之前進行所有觀測,依此類推。 任何有關這方面的幫助將非常感激。
數據示例:
day hour minute second
01 17 10 03
01 17 14 20
01 17 25 27
01 17 32 39
01 17 33 40
01 17 34 10
01 17 34 14
01 17 34 16
01 17 34 21
01 17 34 23
01 17 34 25
01 17 34 31
01 17 34 36
我有大約300,000個像這樣的觀察。
小時:int 17 17 17 17 17 17 17 17 17 17
分鍾:int 10 14 25 32 33 34 34 34 34 34
第二名:int 3 20 27 39 40 10 14 16 21 23
一種方法是根據您的分箱標准創建一個新變量,然后將該變量制成表格:
set.seed(1)
dat <- data.frame(hour = sample(0:23, 100, TRUE, prob = runif(24)),
minute = sample(0:59,100, TRUE, prob = runif(60)),
second = sample(0:59,100, TRUE, prob = runif(60)))
#Adjust bins accordingly
dat <- transform(dat, bin = ifelse(hour < 3,"Before 3",
ifelse(hour < 6,"Before 6",
ifelse(hour <9,"Before 9","Later in day"))))
as.data.frame(table(dat$bin))
Var1 Freq
1 Before 3 7
2 Before 6 17
3 Before 9 19
4 Later in day 57
根據您需要的容器數量,您可能會遇到嵌套ifelse()語句的問題,但這應該是一個開始。 如果您遇到困難,請更新您的問題並提供更多詳情
length(which(data$hour <=2 ))
怎么樣length(which(data$hour <=2 ))
? 我在這里使用了2點,以避免在第一時間處理分鍾和秒鍾。 然后循環或apply
您想要計算的所有不同時間。
如果您需要每天重新開始計數,請同樣使用數據$ day值。
如果您決定需要不同的時間,這種方法可以提供更大的靈活性。 您可以在任何時間點(不僅僅是幾小時)找到n。 因為我很懶,所以我把這一切都視為人物。
#1. Create a fake data set as chase did
set.seed(1)
dat <- data.frame(hour = sample(0:23, 100, TRUE, prob = runif(24)),
minute = sample(0:59,100, TRUE, prob = runif(60)),
second = sample(0:59,100, TRUE, prob = runif(60)))
#2. Create a function to turn your single digits double and everything into character
dig <- function(x){
ifelse(nchar(as.character(x))<2, paste("0", as.character(x), sep=""),
as.character(x))
}
#3. Use the dig function to make a character dataframe
dat <- data.frame(sapply(dat, dig))
#4. Paste hour minute and second together into new character vector
dat <- transform(dat, time=as.numeric(paste(hour, minute, second,sep="")))
#5. function to take that character vector and compare it to the cut off time
n.obs <- function(var, hour='0', min='00', sec='00', pm=FALSE){
hour <- if(pm) as.character(as.numeric(hour) + 12) else hour
bench <- as.numeric(paste(hour, min, sec, sep=""))
length(var[var<=bench])
}
#try it out
n.obs(dat$time, '2')
n.obs(dat$time, '2', pm=T)
n.obs(dat$time, '14', pm=F) #notice same as above because pm=F
n.obs(dat$time, hour='14', min='30', pm=F)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.