Quando si utilizza apply
su un data.frame, gli argomenti vengono convertiti (implicitamente) in caratteri. Un esempio:Come evitare la conversione implicita dei caratteri quando si utilizza apply su dataframe
df <- data.frame(v=1:10, t=1:10)
df <- transform(df, t2 = as.POSIXlt(t, origin = "2013-08-13"))
class(df$t2[1])
## [1] "POSIXct" "POSIXt" (correct)
ma:
apply(df, 1, function(y) class(y["t2"]))
## [1] "character" "character" "character" "character" "character" "character"
## [7] "character" "character" "character" "character"
C'è un modo per evitare questa conversione? O devo sempre riconvertire con lo as.POSIXlt(y["t2"])
?
modificare
mio df ha 2 timestamp (diciamo, T2 e T3) e di alcuni altri settori (ad esempio, v1, v2). Per ogni riga con dato t2, voglio trovare k (ad esempio 3) righe con t3 più vicino a, ma inferiore a t2 (e lo stesso v1), e restituire una statistica su v2 da queste righe (ad esempio una media). Ho scritto una funzione f (t2, v1, df) e volevo semplicemente applicarla su tutte le righe usando apply(df, 1, function(x) f(y["t2"], y["v1"], df)
. C'è un modo migliore per fare cose del genere in R?
La vera risposta è che non si dovrebbe usare 'apply' su un frame di dati. Cosa stai cercando di fare? – joran
La * conversione * sta avvenendo perché il tuo 'data.frame' è forzato ad una' matrice '. –
Per le tue modifiche hai davvero due domande diverse (IMO). Direi di porre la seconda domanda (la tua modifica) con un set di dati appropriato, ciò che hai provato e l'output desiderato. –