Удалить точки, которые повторяются последовательно более чем n раз - PullRequest
0 голосов
/ 02 марта 2019

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

Пока я это сделал,есть более элегантное решение?Спасибо!

uniques <- unique(data[c("Lat","Long")])
uniques$values = row.names(uniques)
uniques2 <- inner_join(data,uniques,by=c("Lat","Long"))
reps <- data.frame(unclass(rle(uniques2$values)))
delete <- as.character(reps$values[(reps$lengths)>10])
data2 <- uniques2[! uniques2$values %in% delete),]

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

Tidyverse-way будет

data2 <- data %>%
  group_by(Long, Lat) %>%
  filter(n() <= 10) %>%
  ungroup()
0 голосов
/ 02 марта 2019

Предполагая, что вы хотите сохранить первую из строк, где x и y начинают повторяться, вы можете попробовать следующий подход с пакетом dplyr:

library(dplyr)

# Example data
df <- data.frame(
  x = c(rep(1, 5), 2:6, rep(7, 5)),
  y = c(rep(9, 5), 2:6, rep(8, 5))
)

# Cut-off value
n <- 3

# Remove unwanted rows
new_df <- df %>% 
  mutate(same_as_prev = x == lag(x) & y == lag(y)) %>% 
  group_by(x, y, same_as_prev) %>% 
  mutate(consec_count = n()) %>% 
  filter(consec_count <= n & same_as_prev) %>%
  ungroup()
0 голосов
/ 02 марта 2019

Используя data.table Я попробую это однострочное решение:

library(data.table)
data < as.data.table(data)[, count:=.N, by=.(Lat,Long)][count<n][,count:=NULL]

Best!

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