2

行に関連付けられているsことも考慮に入れて、変数の繰り返し値に従ってデータセットをサブセット化する方法を理解しようとしています。id

私のデータセットが次のようになっているとします。

dat <- read.table(text = "
        id     s          
        1      2     
        1      2     
        1      1      
        1      3     
        1      3     
        1      3     
        2      3     
        2      3     
        3      2     
        3      2", 
header=TRUE)

私がやりたいのは、それぞれについてid、最初の行だけを保持することs = 3です。の結果は次のdatようになります。

        id     s          
        1      2     
        1      2     
        1      1      
        1      3         
        2      3         
        3      2     
        3      2

両方を使って、すぐに使ってみduplicated()ましwhich()subset()が、どこにも行きません。主な問題は、「ブロック」の最初の行を分離するだけでは不十分であるということです。これは、s = 3場合によっては(ここではとの間のようid = 1id = 2)、あるIDと別のIDの間で3が重複するためです。どの戦略を採用しますか?

4

1 に答える 1

2

このような:

subset(dat, s != 3 | s == 3 & !duplicated(dat)) 
#    id s
# 1   1 2
# 2   1 2
# 3   1 1
# 4   1 3
# 7   2 3
# 9   3 2
# 10  3 2

subset作業するのは危険である可能性があることに注意してください( 「[」が「サブセット」よりも優れている理由を参照)。したがって、より長く、より安全なバージョンは次のようになります。

dat[dat$s != 3 | dat$s == 3 & !duplicated(dat), ]
于 2013-01-12T01:37:54.503 に答える