12

次のような列を持つ大きなデータフレームがあります。

ID, time, OS, IP

そのデータフレームの各行は、1つのエントリに対応します。一部のIDのそのデータフレーム内には、いくつかのエントリ(行)が存在します。これらの複数の行を削除したいと思います(明らかに、他の属性は同じIDで異な​​ります)。または、別の言い方をすれば、IDごとに1つのエントリ(行)だけが必要です。

ID列で使用するuniqueと、レベル(またはそれぞれの一意のID)のみを受け取りますが、他の属性も保持したいと思います。を使ってみましたapply(x,2,unique(data$ID))が、これもうまくいきません。

4

2 に答える 2

28
subset(data,!duplicated(data$ID))

トリックを行う必要があります

于 2010-05-03T16:11:36.010 に答える
3

IDごとに1つの行を保持したいが、各行に異なるデータがある場合は、追加の行を破棄するロジックを決定する必要があります。例えば:

df <- data.frame(ID=c(1, 2, 2, 3), time=1:4, OS="Linux")
df
  ID time    OS
1  1    1 Linux
2  2    2 Linux
3  2    3 Linux
4  3    4 Linux

ここで、最大時間値と最後のOS値を保持します。

library(plyr)
unique(ddply(df, .(ID), function(x) data.frame(ID=x[,"ID"], time=max(x$time), OS=tail(x$OS,1))))
  ID time    OS
1  1    1 Linux
2  2    3 Linux
4  3    4 Linux
于 2010-05-03T16:13:05.583 に答える