簡體   English   中英

如何計算R中給定間隔的觀測數量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM