只保留重复的值,如果它们在第一个采样周期中表示。

3
我正在尝试清理我的数据,以便只保留在第一个采样期间观察到的重复值。例如,如果我的数据框看起来像这样:
    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

使用此页面上的建议(删除所有唯一行),我尝试使用以下命令,但它保留了个体3的观测值(该个体在第1期未被测量)。

    subset(df, duplicated(ID) | duplicated(ID, fromLast=T))
2个回答

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

1
您可以按如下方式使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接