Excluir linhas respeitando uma restrição de tempo

marca

Eu tenho o seguinte conjunto de dados:

>dput(df)
 structure(list(Author = c("hitham", "Ow", "WPJ4", "Seb", "Karen", "Ow", "Ow", "hitham", "Sarah",
 "Rene"), diff = structure(c(28, 2, 8, 3, 7, 8, 11, 1, 4, 8), class = "difftime", units = "secs")), 
 row.names = 1:10, class = "data.frame")

Como podemos ver, o autor Owaparece três vezes e o autor hithamduas vezes:

    Author    diff
 1  hitham 28 secs
 2      Ow  2 secs
 3    WPJ4  8 secs
 4     Seb  3 secs
 5   Karen  7 secs
 6      Ow  8 secs
 7      Ow 11 secs
 8  hitham  1 secs
 9   Sarah  4 secs
 10   Rene  8 secs

Essas linhas representam algumas atividades realizadas pelos autores. Por exemplo, hithamrealiza sua atividade após 1 seg e depois de 18 seg no segundo tempo.

Gostaria de ter certeza de que há pelo menos 10 segundos entre uma atividade e outra.

Gostaria de excluir as atividades (linhas) que não atendem a esse requisito. Por exemplo, Owexecuta sua atividade após 2 segundos e, em seguida, após 8 segundos: o último deve ser excluído. O resultado desejado é então:

    Author    diff
 1  hitham 28 secs
 2      Ow  2 secs
 3    WPJ4  8 secs
 4     Seb  3 secs
 5   Karen  7 secs
 6      Ow 11 secs
 7  hitham  1 secs
 8   Sarah  4 secs
 9    Rene  8 secs

Editar . Acrescento isso na esperança de ser mais claro. Vamos considerar hitham. Se considerarmos as hithamlinhas (classificadas por diffcampo):

   hitham  1 secs
   hitham 28 secs

Nós temos isso (28-1)+1>10, então não há necessidade de deletar nenhum deles.

Vamos agora considerar Ow.

       Ow  2 secs
       Ow  8 secs
       Ow 11 secs

As diferenças em segundos entre as linhas consecutivas são (consulte a última coluna):

       Ow  2 secs  -
       Ow  8 secs  7
       Ow 11 secs  4

O resultado desejado pode ser obtido apagando a primeira linha que mostra na última coluna um número menor que 10. Na verdade:

       Ow  2 secs  -
       Ow 11 secs  10

Não precisamos deletar a última linha porque a diferença aqui é apenas 10.

Ben

Com base nessa resposta, você pode tentar uma abordagem recursiva.

library(dplyr)

my_fun <- function(d, ind = 1) {
  ind.next <- first(which(d - d[ind] >= 9))
  if (length(ind.next) == 0)
    return(ind)
  else
    return(c(ind, my_fun(d, ind.next)))
}

df %>%
  group_by(Author) %>%
  arrange(diff) %>%
  slice(my_fun(diff))

Cada vez na função, ela identifica o próximo índice ind.nextque é o primeiro índice para o qual o diffé maior ou igual a 9 segundos do diffindexado por ind. Se não houver nenhum ind.nextdisponível, ele retorna ind. Caso contrário, chame recursivamente a função novamente e concatene com ind.

Saída

  Author diff   
  <chr>  <drtn> 
1 hitham  1 secs
2 hitham 28 secs
3 Karen   7 secs
4 Ow      2 secs
5 Ow     11 secs
6 Rene    8 secs
7 Sarah   4 secs
8 Seb     3 secs
9 WPJ4    8 secs

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como posso excluir uma linha entre o intervalo de tempo no gráfico de linhas (Bokeh)?

Excluir linhas de uma junção à esquerda

Como faço para contar o número de linhas em uma variável bash, respeitando o vazio?

Por que não consigo excluir linhas de uma tabela

O que é uma restrição de tempo de execução?

Como excluir linhas que não estão em um período de tempo específico?

Adicionando uma coluna de índice a um dataframe, respeitando períodos de tempo e agrupamento

Excluir linhas e colunas de uma matriz

Como juntar todos os arquivos txt que estão dentro de um diretório? (Respeitando que todas as linhas estão uma abaixo da outra)

Postgresql - atualizar linhas ou excluir em violação de restrição única

Como inserir uma janela de tempo de dados na tabela que se sobrepõe parcialmente às linhas existentes com restrição única

Linhas do MySQL SELECT ONDE o tempo está dentro de uma janela de tempo especificada

Excluir todas as linhas de uma pasta de trabalho que acabei de abrir o VBA

Como posso excluir o Layout de restrição padrão de uma atividade em branco?

Como excluir linhas com base na combinação de valores de uma coluna em R?

Não é possível excluir várias linhas de uma vez na tabela de dados

Não é possível excluir várias linhas de uma vez na tabela de dados

Seleção de linhas para excluir com uma junção implícita

R: Excluir linhas onde uma coluna é uma substring de outra

Como excluir linhas em R, que contém o mesmo "conjunto" de dados em uma coluna

Consulta para excluir todas as linhas em uma tabela de hibernação

Maneira de excluir todas as linhas subsequentes após uma ordem não contínua

excluir várias linhas na mesma célula do Excel (não uma quebra de linha)

Como posso excluir várias linhas de uma tabela com outra condição?

Como excluir linhas e colunas de uma matriz NxN associativa em O (n) em C ++?

Uma maneira de excluir linhas se o número da linha estiver contido em um conjunto?

Existe uma maneira eficiente de excluir linhas Eigen já alocadas, mas vazias, sem realocação?

Como excluir linhas com base em uma condição na variável de fator em R

incapaz de excluir linhas com o caractere *