2017-08-25 25 views
1

でグループごとに最後のレコード(ID)が私のデータで削除します。ここではここでR

> PayInstance EMPLID DEPTID JOBCODE PAY_FREQUENCY MAX._TTL.GROSS 
> 1 1 23231606 100880    W   1203 
> 2 1 23231606 100880    W   597 
> 3 1 23231606 100880    W   625 
> 4 1 23231606 100880    W   245 
> 5 1 23231606 100880    W   480 
> 6 1 23231606 100880    W   758 
> 7 1 23231606 100880    W   599 
> 1 2 23231606 100880    W   551 
> 2 2 23231606 100880    W   767 
> 3 2 23231606 100880    W   880 
> 3 2 23231606 100880    W   557 
> 4 2 20441606 100880    W   909 

は私がやりたいものです。

> PayInstance EMPLID DEPTID JOBCODE PAY_FREQUENCY MAX._TTL.GROSS 
> 1 1 23231606 100880    W   1203 
> 2 1 23231606 100880    W   597 
> 3 1 23231606 100880    W   625 
> 4 1 23231606 100880    W   245 
> 5 1 23231606 100880    W   480 
> 6 1 23231606 100880    W   758 
> 1 2 23231606 100880    W   551 
> 2 2 23231606 100880    W   767 
> 3 2 23231606 100880    W   880 
> 3 2 23231606 100880    W   557 

これが私のスタートですが、私はよ、私はこのために私自身の関数を記述する必要があります私は、私がコメント欄で完全に有効な解答に加えて

df %>% 
    group_by(EMPLID) %>% 
+0

... '%>%スライス(-n())' – Gregor

+0

がベースRであり、あなたは 'DAT [AVE(DAT $ EMPLID> 0、DAT $を行うことができますEMPLID、FUN = function(x)c(head(x、-1)、FALSE))、]。 – lmo

+0

最初に、応答に感謝します。私はベースのデータを使用すると、それが適用されるようにする方法があります(つまり、$ EMPLID> 0、$ EMPLID、FUN = function(x)c(head(x、-1)、FALSE))特定のグループに?たとえば、0または1でコーディングされたグループ1にのみ適用したい場合は、どこに行く必要がありますか? –

答えて

0

ないよ確信していると、誰かが役に立つことを願って仮定ここで代替dplyrを使用したソリューションとdata.table

## Data table 
setDT(df) 
df[, obs := 1:.N] 
df[df[, max(obs) != obs, by = EMPLID]$V1, ] 


## Dplyr 
df$obs <- 1:nrow(df) 
df %>% group_by(EMPLID) %>% filter(max(obs) != obs)