selezionare solo le righe se il suo valore in una determinata colonna è inferiore al suo valore nell’altra colonna

Sto usando la R e la necessità di selezionare le righe con l’età (di morte) inferiore o uguale a laclen (durata di lattazione). Sto cercando di creare un nuovo frame di dati da includere solo le righe/id per cui il valore della colonna’aged’ meno rispetto al suo corrispondente ‘laclength’ valore.

df:
 id1   id2    laclen    aged
9830  64526    26       6 
7609  64547    28       0 
9925  64551     3       0 
9922  64551     3       5 
9916  64551     3       8 
9917  64551     3       8 
9914  64551     3       2 

il nuovo frame di dati dovrebbe essere simile a questo:

dfnew:
id1   id2    laclen    aged
9830  64526    26       6 
7609  64547    28       0 
9925  64551     3       0 
9914  64551     3       2

Qualsiasi aiuto sarebbe apprezzato!

Bazon

  • Si prega di fornire maggiori dettagli circa la vostra esigenza.
  • non sempre si a tutti
  • Ciao Karthik, sto cercando di creare un nuovo frame di dati da includere solo le righe/id per cui il valore della colonna’aged’ è inferiore al valore di colonna ‘laclength’
InformationsquelleAutor Bazon | 2010-05-18

 

3 Replies
  1. 87
    df[df$aged <= df$laclen, ] 

    Dovrebbe fare il trucco. Le parentesi quadre consentono di indice basato su una logica di espressione.

    • grazie, aL3xa! Terrò questo. Vedo che è molto simile a una wkmor1 inviato in precedenza.
    • senza detach potrebbe essere pericoloso… E penso che la virgola è fuori posto.
    • grazie per i suggerimenti! Ho aggiunto detach e messo la virgola dopo la parentesi di destra, così si va come questo: attach(df); newdf <- df[which(aged <= laclen), ]; detach(df)
    • Si potrebbe anche usare withnewdf <- df[with(df,which(aged <= laclen)), ] invece di attach/detach.
    • Ricevo l’errore:Error in Ops.factor(value, productcode) : level sets of factors are different, dovuto impostare i livelli di tali campi: stackoverflow.com/questions/24594981/…
    • Questa soluzione restituisce NA linee in cui i criteri non sono soddisfatti, l’ @Jonathan Chang risposta ha funzionato meglio per me

  2. 44

    Si può anche fare

    subset(df, aged <= laclen)
    • bella, rende il codice più ordinato, secondo me, peccato R CMD check non riconosce i campi utilizzati nel test come legittimo variabili. emette un NOTE “non visibile associazione per la variabile globale”.
    • subset() ha dei seri problemi, come per esempio stackoverflow.com/questions/9860090/…

Lascia un commento