2016-12-05 77 views
2

我正在嘗試清理我的數據,以便只保留在第一個採樣週期中具有觀察值的重複值。舉例來說,如果我的數據幀是這樣的:僅在第一個採樣週期內保留重複值

df <- data.frame(ID = c(1,1,1,2,2,2,3,3,4,4), period = c(1,2,3,1,2,3,2,3,1,3), mass = rnorm(10, 5, 2)) 

    df 

     ID period  mass 
    1 1  1 3.313674 
    2 1  2 6.371979 
    3 1  3 5.449435 
    4 2  1 4.093022 
    5 2  2 2.615782 
    6 2  3 3.622842 
    7 3  2 4.466666 
    8 3  3 6.940979 
    9 4  1 6.226222 
    10 4  3 4.233397 

我想保留意見僅是重複的週期1.我的新數據幀期間測量個人的意見則是這樣的:

 ID period  mass 
    1 1  1 3.313674 
    2 1  2 6.371979 
    3 1  3 5.449435 
    4 2  1 4.093022 
    5 2  2 2.615782 
    6 2  3 3.622842 
    9 4  1 6.226222 
    10 4  3 4.233397 

使用本頁的建議(Remove all unique rows)我曾嘗試使用下面的命令,但它留在個人3的觀察(這是不是在期間1測量)。

subset(df, duplicated(ID) | duplicated(ID, fromLast=T)) 

回答

0

您可以使用dplyr如下:

library(dplyr) 
df %>% group_by(ID) %>% filter(1 %in% period) 

#Source: local data frame [8 x 3] 
#Groups: ID [3] 

#  ID period  mass 
# <dbl> <dbl> <dbl> 
#1  1  1 7.622950 
#2  1  2 7.960665 
#3  1  3 5.045723 
#4  2  1 4.366568 
#5  2  2 4.400645 
#6  2  3 6.088367 
#7  4  1 2.282713 
#8  4  3 2.461640 
3

如果你想要一個基地的解決方案,下面應該工作,以及。

> df_new <- df[df$ID %in% df$ID[df$period == 1], ] 
> df_new 
    ID period  mass 
1 1  1 3.238832 
2 1  2 3.428847 
3 1  3 1.205347 
4 2  1 8.498452 
5 2  2 7.523085 
6 2  3 3.613678 
9 4  1 3.324095 
10 4  3 1.932733