1

はじめまして、こんにちは!これは私の最初の投稿であり、少し緊張していることを認めなければなりません

各要素が 3 重になっており、独自の値を持つ data.frame があります。例を次に示します。

test <-data.frame (id = c("a", "a", "a" , "b", "b", "b"),
        val = c(1,100,300,1,2,3))  

各レプリカ セットの値の差を計算し、最初の値と 2 番目の値、または 2 番目と 3 番目の値の差が数値よりも小さい場合は、それを削除する必要があります。

独自の小さな関数を作成して ddply で使用しようとしましたが、これまでのところ成功していません

ここで私がやろうとしていること:

f<-function(x) if(x[1,2]-x[2,2] < 60 || x[2,2]- x[3,2] < 60) NULL else (x)
ddply(test, .(id), f)

最後に、この例でやりたいことは次のとおりです。

id    val
a    1
a    100
a    300

(1-2 < 60) であるため、「b」は削除されます。

代わりに、さまざまなエラー メッセージや奇妙な data.frames が表示されます。

私が十分に明確だったことを願っています。

前もって感謝します

MP

編集:違いは絶対値で意図されています

4

1 に答える 1

3

内部で使用している関数はddply、データフレームを返す必要があります (この場合、最終結果からそのセクションを削除したい場合は何も返しません)。

ddply(
  test,
  .(id),
  function(df_part, min_diff) {
    # Using abs() because I assume you want absolute differences
    diffs <- abs(diff(df_part$val))
    if (any(diffs < min_diff)) {
      return()
    } else {
      return(df_part)
    }
  },
  min_diff=60
)
于 2013-03-05T09:28:26.287 に答える