按组去除重复年份行

3

我有一个 data.table,格式如下:

data <- data.table(group = rep(1:3, each = 4), 
    year = c(2011:2014, rep(2011:2012, each = 2),
             2012, 2012, 2013, 2014), value = 1:12)

这只是我的数据的摘要。

因此,群组220112012有2个值。 而群组3在年份20122个值。 我只想保留所有重复年份的第一行。

因此,实际上,我的data.table将变为以下内容:

data <- data.table(group = c(rep(1, 4), rep(2, 2), rep(3, 3)),
                   year = c(2011:2014, 2011, 2012, 2012, 2013, 2014),
                   value = c(1:5, 7, 9, 11, 12))

我该如何做到这一点?提前感谢。

5个回答

3
尝试使用duplicated,结合data.table选项。
> data[!duplicated(cbind(group, year))]
   group year value
1:     1 2011     1
2:     1 2012     2
3:     1 2013     3
4:     1 2014     4
5:     2 2011     5
6:     2 2012     7
7:     3 2012     9
8:     3 2013    11
9:     3 2014    12

1
请注意 duplicated.data.table 中的 by 参数。谢谢。 - Henrik

2

对于 data.table,您可以通过将 by 参数传递给 unique 函数来实现 -

library(data.table)

unique(data, by = c('group', 'year'))

#   group year value
#1:     1 2011     1
#2:     1 2012     2
#3:     1 2013     3
#4:     1 2014     4
#5:     2 2011     5
#6:     2 2012     7
#7:     3 2012     9
#8:     3 2013    11
#9:     3 2014    12

1
一种解决方案是使用dplyr中的distinct,如下所示:
library(dplyr)
data %>% 
  distinct(group, year, .keep_all = TRUE)

输出:

   group year value
1:     1 2011     1
2:     1 2012     2
3:     1 2013     3
4:     1 2014     4
5:     2 2011     5
6:     2 2012     7
7:     3 2012     9
8:     3 2013    11
9:     3 2014    12

1

使用基础的 R 语言

subset(data, !duplicated(cbind(group, year)))

0

这应该可以解决问题:

library(tidyverse)
data %>% 
  group_by(group, year) %>% 
  filter(!duplicated(group, year))

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