2015-05-28 27 views
5

Ecco un frame di dati di esempio:rimozione fila condizionale in un frame di dati R

df <- data.frame(t1 = c(1,2,3,4), t2 = c(7,3,8,1), t3 = c(1,1,1,1)) 

df 
    t1 t2 t3 
1 1 7 1 
2 2 3 1 
3 3 8 1 
4 4 1 1 

mio obiettivo è quello di rimuovere il valore massimo di ogni colonna. Tuttavia, per le colonne come t3, dove tutti i valori nella colonna sono uguali, avrei semplicemente rimuovere un singolo valore in modo che tutte e tre colonne nella cornice dati finiscono con tre file, come di seguito:

df2 
    t1 t2 t3 
1 1 7 1 
2 2 3 1 
3 3 1 1 

risposta

4

stai usando solo which.max poiché ciò selezionare solo valore (ossia l'indice della prima occorrenza del valore massimo):

as.data.frame(lapply(df, function(x) x[-which.max(x)])) 
# t1 t2 t3 
# 1 1 7 1 
# 2 2 3 1 
# 3 3 1 1 
+0

piacevole, soluzione semplice. Non ero a conoscenza di quella caratteristica di cui.max (ovviamente). – bshelt141

4

Prova

library(data.table) 
setDT(df)[, lapply(.SD, function(x) x[-which.max(x)])] 
Problemi correlati