J'ai un grand ensemble de données avec des points X et Y. Je veux l'animer, donc je veux supprimer les points qui sont des emplacements fixes.Je voudrais supprimer les lignes où les mêmes X et Y sont répétés plus de n fois.
Jusqu'à présent, j'ai fait cela, y a-t-il plus solution élégante? Merci!
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 Réponses :
En utilisant data.table , je vais essayer cette solution en une seule ligne:
library(data.table) data < as.data.table(data)[, count:=.N, by=.(Lat,Long)][count<n][,count:=NULL]
Meilleur!
Tidyverse-way serait
data2 <- data %>% group_by(Long, Lat) %>% filter(n() <= 10) %>% ungroup()
Cette solution suppose que les emplacements ne sont pas revisités.
En supposant que vous souhaitiez conserver la première des lignes où x et y commencent à se répéter, vous pouvez essayer l'approche suivante avec le dplyr package:
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()
Besoin de données et de clarifications concernant "X" et "Y" (vraisemblablement Lat "et" long ").
Vous devriez probablement coller les valeurs ensemble pour créer un vecteur à analyser avec rle.