Como modificar uma coluna com base em uma condição em uma série temporal?

adkane

Eu tenho dados sobre os territórios dos animais por mês (1 = janeiro etc.) para vários indivíduos:

year month terr_size id
2018  1    20        1 
2018  2    30        1
2019  1    5         1 
2019  2    10        1
2018  3    20        2 
2018  5    25        2
2018  6    20        2
2018  7    20        2 
2019  1    10        2
2019  2    5         2 
2019  3    20        2
2019  4    30        2   

Eu quero adicionar uma coluna que tem 1 se dois meses consecutivos excederem algum valor, por exemplo, 10. Uma coisa é que meus dados podem durar mais de um ano para um único id.

year month terr_size id new_col
2018  1    20        1  1
2018  2    30        1  1
2019  1    5         1  0 
2019  2    10        1  0
2018  3    20        2  0
2018  5    25        2  1
2018  6    20        2  1
2018  7    20        2  1
2019  1    10        2  0
2019  2    5         2  0
2019  3    20        2  1
2019  4    30        2  1  
G. Grothendieck

Isso pode ser expresso de forma compacta usando uma única junção à esquerda em uma única instrução SQL.

Usando a entrada mostrada na Nota no final, execute uma auto-junção à esquerda usando a oncondição indicada e defina new_colcomo 1 se, para qualquer linha original, tanto ela quanto as linhas correspondentes tiverem terr_sizemaior ou igual a 10. Se não houver nenhuma linha correspondente, então use coalescer para definir new_colcomo 0.

library(sqldf)

sqldf("
  select a.*, 
    coalesce(max(a.terr_size >= 10 and b.terr_size >= 10), 0) 
      new_col
  from DF a 
  left join DF b on 
    a.id = b.id and 
    (12 * b.year + b.month = 12 * a.year + a.month + 1 or
     12 * b.year + b.month = 12 * a.year + a.month - 1)
  group by a.rowid")

dando:

   year month terr_size id new_col
1  2018     1        20  1       1
2  2018     2        30  1       1
3  2019     1         5  1       0
4  2019     2        10  1       0
5  2018     3        20  2       0
6  2018     5        25  2       1
7  2018     6        20  2       1
8  2018     7        20  2       1
9  2019     1        10  2       0
10 2019     2         5  2       0
11 2019     3        20  2       1
12 2019     4        30  2       1

Nota

A entrada e a saída mostradas na pergunta não são consistentes, então, para ficar claro, assumimos o seguinte:

Lines <- "year month terr_size id
2018  1    20        1  
2018  2    30        1  
2019  1    5         1   
2019  2    10        1  
2018  3    20        2  
2018  5    25        2  
2018  6    20        2  
2018  7    20        2  
2019  1    10        2  
2019  2    5         2  
2019  3    20        2  
2019  4    30        2  "
DF <- read.table(text = Lines, header = TRUE)

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

modificar 2 colunas com base em uma condição em uma coluna diferente

Como determinar o estado em uma coluna com base em duas outras colunas booleanas para um dataframe Pandas da série temporal?

Como você filtraria uma série de objetos com base em uma condição

Como você filtraria uma série de objetos com base em uma condição

Como modificar o valor de uma célula / s com base em uma condição no dataframe Pyspark

PYSPARK: como posso atualizar um valor em uma coluna com base em uma condição

Pygsheets: como destacar células em uma coluna específica com base em uma condição

Como substituir certos valores em uma coluna com base em uma determinada condição?

Pygsheets: como destacar células em uma coluna específica com base em uma condição

Como aplicar uma operação em uma coluna com base em uma condição de outra coluna

como adicionar uma coluna com um contador com base em uma condição

como adicionar uma coluna com um contador com base em uma condição

Como mudo o valor em uma série de pandas com base na condição

R como filtrar uma série temporal de medições com base em valores anteriores

como definir o valor de uma coluna para outra com base em uma condição

Como obter a porcentagem de uma coluna com base em uma condição? Pitão

Pyspark não pode modificar uma coluna com base em uma condição quando os valores de uma coluna estão em outra lista

Como filtrar os valores da série do pandas com base em uma condição

Como selecionar linhas de uma série com base em valores ou condição, dinamicamente?

como preencher uma coluna com o valor de outra coluna com base em uma condição em algumas outras colunas?

Como faço para extrair datas com base em valores de colunas de uma série temporal?

Como exibir uma coluna com base em uma condição verdadeira para a coluna correspondente em data.frame em R

Como exibir uma coluna com base em uma condição verdadeira para a coluna correspondente em data.frame em R

Como criar uma nova coluna no PySpark com base em uma condição dinâmica

Como criar uma nova coluna e adicionar valores a ela com base em uma condição no MySQL?

Como ocultar e mostrar uma coluna na tabela html com base em uma condição php

Como selecionar linhas com base em uma coluna verdadeira para uma condição

Como eliminar uma linha com base na condição de uma coluna em pandas?

Como atribuir valores a uma coluna de um dataframe com base em uma condição?

TOP lista

quentelabel

Arquivo