Удаление подмножества строк на основе других переменных - PullRequest
1 голос
/ 16 июня 2020

Я следовал этому примеру Удалить последние N строк в фрейме данных с произвольным количеством строк , но он просто удаляет только последние 50 строк фрейма данных, а не последние 50 строк каждого места исследования во фрейме данных. У меня есть действительно большой набор данных, в котором есть несколько участков исследования, и в каждом участке исследования есть несколько глубин и для каждой глубины концентрация питательных веществ.

Я хочу просто удалить последние 50 строк глубины для каждой станции.

Например, у станции 1 250 глубин, у станции 2 - 1000 глубин, у станции 3 - 150 глубин

, но все остальные данные должны быть согласованы.

Кажется, это удаляет последние 50 из фрейма данных, а не последние 50 из каждой станции ...

 df<- df[-seq(nrow(df),nrow(df)-50),]

Что мне делать, чтобы добавить больше переменных (сайт исследования) в фильтровать по?

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Возможное решение с основанием R будет:

d <- data.frame(station = rep(paste("station", 1:3), c(250, 1000, 150)),
                depth = rnorm(250 + 1000 + 150, 100, 10))

d$grp_counter <- do.call("c", lapply(tapply(d$depth, d$station, length), seq_len))
d$grp_length <- rep(tapply(d$depth, d$station, length), tapply(d$depth, d$station, length))
d <- d[d$grp_counter <= (d$grp_length - 50),]
d

# OR w/o auxiliary vars: subset(d, select = -c(grp_counter, grp_length))
1 голос
/ 16 июня 2020

мы можем использовать slice функцию из dplyr пакета

df2<-df %>% group_by(Col1) %>% slice(1:(n()-4))

Сначала он группируется по столбцу категорий, и, если он расположен в правильном порядке, он может удалить последние n строк (в данном случае 4 ) из фрейма данных для каждой категории.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...