1

これは私の最初の投稿なので、適切に行う必要があることを説明できれば幸いです。私はまだRに慣れていないので、これに答える投稿を読んだことがあるかもしれませんが、私の人生では、それらが何を意味するのか理解できません。これがすでに回答されている場合は、事前に謝罪してください。

ラジオカラーから取得した GPS 位置の非常に大きなデータ セットがあり、毎日の位置の数に一貫性がありません。データセットを調べて、GPS 信号の精度レベルに基づいて、毎日 1 つのデータ ポイントを選択したいと考えています。

したがって、本質的にはこのように見えます。

Accuracy    Month    Day    Easting    Northing    Etc
   5          6       1     #######    ########     #
   3.2        6       1     #######    ########     #
   3.8        6       1     #######    ########     #
   1.6        6       2     #######    ########     #
   4          6       3     #######    ########     #
   3.2        6       3     #######    ########     #

そして、残りの関連データを保持しながら、毎日最も正確なポイント (最も低い精度の測定値) を引き出したいと考えています。

現在、タップ機能を使用しています

datasub1<-subset(data,MONTH==6)
tapply(datasub1$accuracy, datasub1$day, min)

この方法を使用して、最小値を毎日 1 つ取得できますが、関連する座標とタイミング、およびその他すべての重要な情報を取得することはできません。データ セットが 300 000 行近くあるため、実際に取得できます。手でやらないでください。

基本的に、タップと同じ結果を得る必要がありますが、個々のポイントではなく、そのポイントが含まれる行全体が必要です。

手を貸していただける方に、事前に感謝します。さらに情報が必要な場合はお知らせください。お届けできるよう最善を尽くします。

4

3 に答える 3

6

使用できますddply: data.frame を断片 (1 日 1 つ) に分割し、各断片に関数を適用します。

# Sample data
n <- 100
d <- data.frame(
  Accuracy = round(runif(n, 0, 5), 1),
  Month    = sample(1:2, n, replace=TRUE),
  Day      = sample(1:5, n, replace=TRUE),
  Easting  = rnorm(n),
  Northing = rnorm(n),
  Etc      = rnorm(n)
)

# Extract the maximum for each day
# (In case of ties, you only have the first row)
library(plyr)
ddply( 
  d, 
  c("Month", "Day"), 
  function (u) u[ which.min(u$Accuracy), ] 
)
于 2012-01-19T01:42:25.907 に答える
2

これは、少なくとも最初に plyr 関数の基礎を形成した分割適用パラダイムを使用した 1 つの基本ソリューションです。

lapply( 
     split(dat, list(dat$Month, dat$Day)),
         function(d) d[ which.min(d$Accuracy), ])
于 2012-01-19T02:26:19.290 に答える
2

したがって、実際にはまったく集計したくありません。あなたがする必要があるのは、毎日の最小値を選択することだけです. したがって、最小値を見つけて一致するものを選択するだけです。

mins <- ave(datasub1$accuracy, datasub1$day, FUN = min)
datasub1[ datasub1$accuracy == mins, ]

日ごと、月ごと、年ごとなどが必要な場合は、リストとして ave の 2 番目の引数に追加します。別の構文を次に示します。

mins <- with( datasub1, ave(accuracy, day, month, FUN = min) )
于 2012-01-19T05:19:56.490 に答える