首页 > 解决方案 > r - 删除数据框中每个主题的第一行条件

问题描述

我有一个长格式数据框,其中包含多个主题和每个主题的多个条件。我想为所有科目删除每个条件的第一行(第一个除外)。我的数据框如下所示:

> df <- data.frame(subj = c(rep(1,4),rep(2,4), rep(3,4)), cond = (rep(c("A", "A", "B", "B"),times=3)), value = round(runif(12, min = 0, max = 10)))
> df
subj cond value
1    A     1
1    A     5
1    B     3
1    B    10
2    A     6
2    A     5
2    B     2
2    B     0
3    A     5
3    A     8
3    B     5
3    B     2

我找到了 duplicated() 函数,但它只删除了第一个主题的每个条件的第一行:

df <- df[duplicated(df$cond),]
subj cond value
 1    A     5
 1    B    10
 2    A     6
 2    A     5
 2    B     2
 2    B     0
 3    A     5
 3    A     8
 3    B     5
 3    B     2

有没有办法在新主题开始时“重置”重复的发现?我怎样才能阻止它排除第一个条件的第一行?

非常感谢大家!

标签: r

解决方案


您可以使用两个变量的重复交互进行子集化:

> df
   subj cond value
1     1    A     5
2     1    A     7
3     1    B     4
4     1    B     8
5     2    A     5
6     2    A     2
7     2    B     8
8     2    B     5
9     3    A     8
10    3    A     1
11    3    B     1
12    3    B     5

df1 <- df[!duplicated(interaction(df$subj, df$cond)),]

> df1
   subj cond value
1     1    A     5
3     1    B     4
5     2    A     5
7     2    B     8
9     3    A     8
11    3    B     1

编辑:

我再次阅读了您的问题,您似乎想删除第一行,而不是最后一行。在这种情况下,使用

df1 <- df[!duplicated(interaction(df$subj, df$cond), fromLast = TRUE),]

> df1
   subj cond value
2     1    A     4
4     1    B     9
6     2    A     9
8     2    B     7
10    3    A     1
12    3    B     2

推荐阅读