0

DATE、HOUR、HRC の 3 つの列を持つデータ フレームがあります (つまり、DATE ごとに 24 行あります)。HRC 列は数値の場合もあれば、NA の場合もあります。DATE のサブセットを取得し、すべての日に NA 以外の値を持つ HOUR を計算する方法を見つけようとしています。

例: DATES が 8 月 16 日、8 月 18 日、8 月 19 日の場合、HRC 列には 8 月 16 日の 8、9、10、11、12 時間に非 NA 値が含まれます... 8 月 18 日の 7、8、9、10、11 時間.. .Aug19 at HOURS 9, 10, 11, 12, 13. HOURS 9, 10, 11 はすべての日付の非 NA HOURS であるため、結果を HOURS 9, 10, 11 のリストにしたいと考えています。

Gary のソリューションで sum(is.na(x$HRC)) を sum(!is.na(x$HRC)) に調整するとうまくいきました。みんな、ありがとう!

4

2 に答える 2

1

あなたは例を作成しなかったので、私たちはあなたの質問について本当に混乱しています. 再現可能な例を提供することは、一般的に建設的です。日付型の例を作成するのは少し難しいことは認めますが。

set.seed(1234)
#generate sequence of 25 days hour by hour
x <- Sys.time() + seq(1,by=60*60,length.out=24*25)
hh <- as.POSIXlt(x)$hour
## generate the data.frame
dat <- data.frame(DATE = as.POSIXct(format(x,"%Y-%m-%d")),
                  HOUR=as.POSIXlt(x)$hour,
                  HRC  = 1:length(x))
## introduce random NA
id <- sample(nrow(dat),10,rep=F)
dat$HRC[id] <- NA

ここから私の解決策が始まります。Gary ソリューションに似ていplyrます。パッケージを使用していますが、機能が異なります。

## I choose 2 dates to subset
min.d <- as.POSIXct('2013-03-01')
max.d <- as.POSIXct('2013-03-15')

dat.s <- subset(dat, DATE >=min.d & DATE <= max.d )


res <- ddply(dat.s, .(HOUR),   ## grouping by hour
      function(x){   
        any(is.na(x$HRC))  ## I retuen one HRC at least is NA
      })

結果:

res[res$V1,]
  HOUR   V1
6     5 TRUE
12   11 TRUE
14   13 TRUE
17   16 TRUE
19   18 TRUE
22   21 TRUE
于 2013-02-26T23:53:17.757 に答える
0

次のようなことを試してみてください:

library(plyr)

# assuming your dates are in some date format
d_0 <- as.Date('02-01-2010',format='%m-%d-%Y')

d_1 <- as.Date('02-10-2010',format='%m-%d-%Y')

# assuming your data are in data frame 'dat', get some subset of dates
some_dates <- subset(dat, DATE > d_0 & DATE < d_1)

# count the NAs for each hour
hr_count <- ddply(some_dates, .(HOUR), function(x) sum(!is.na(x$HRC)))
于 2013-02-27T00:05:50.383 に答える