Выберите уникальные записи, показывающие хотя бы одно значение из другого столбца - PullRequest
2 голосов
/ 16 апреля 2020

У меня есть следующий набор данных (32000 записей) среднегодовых значений химических соединений воды, упорядоченных по участкам мониторинга и году отбора проб:

data= data.frame(Site_ID=c(1, 1, 1, 2, 2, 2, 3, 3, 3), Year=c(1976, 1977, 1978, 2004, 2005, 2006, 2003, 2004, 2005), AnnualMean=c(1.1, 1.2, 1.1, 2.1, 2.6, 3.1, 2.7, 2.6, 1.9))
Site_ID    Year    AnnualMean
1          1976    1.1
1          1977    1.2
1          1978    1.1
2          2004    2.1
2          2005    2.6
2          2006    3.1
3          2003    2.7
3          2004    2.6
3          2005    1.9

Я хотел бы выбрать данные только из всех участков мониторинга показывая по крайней мере измерение в 2005 году в их временном диапазоне. С указанным выше набором данных ожидаемый выходной набор данных будет:

Site_ID    Year    AnnualMean
2          2004    2.1
2          2005    2.6
2          2006    3.1
3          2003    2.7
3          2004    2.6
3          2005    1.9

Я полностью новичок в R и вращаю свою голову с манипуляциями с данными, поэтому спасибо заранее!

Ответы [ 3 ]

5 голосов
/ 16 апреля 2020

С dplyr:

library(dplyr)
data %>%
  group_by(Site_ID) %>%
  filter(2005 %in% Year)
3 голосов
/ 16 апреля 2020

Вот базовое решение R, использующее subset + ave

dfout <- subset(df,!!ave(Year,Site_ID,FUN = function(x) "2005" %in% x))

, такое что

> dfout
  Site_ID Year AnnualMean
4       2 2004        2.1
5       2 2005        2.6
6       2 2006        3.1
7       3 2003        2.7
8       3 2004        2.6
9       3 2005        1.9
1 голос
/ 16 апреля 2020

Опция с data.table

library(data.table)
setDT(data)[, .SD[2005 %in% Year], Site_ID]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...