Podczas korzystania z apply
na data.frame, argumenty są (niejawnie) konwertowane na znak. Przykład:Jak uniknąć niejawnej konwersji znaków podczas używania Zastosuj na ramce danych
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)
ale:
apply(df, 1, function(y) class(y["t2"]))
## [1] "character" "character" "character" "character" "character" "character"
## [7] "character" "character" "character" "character"
Czy istnieje jakiś sposób, aby uniknąć tej konwersji? Czy zawsze muszę przeprowadzić konwersję z powrotem przez as.POSIXlt(y["t2"])
?
edit
Moja df ma 2 znaczniki czasu (powiedzmy, T2 i T3) i niektóre inne pola (powiedzmy, v1, v2). Dla każdego wiersza z podanym t2, chcę znaleźć k (np. 3) wierszy z t3 najbliższym, ale niższym niż t2 (i tym samym v1), i zwrócić statystyki powyżej v2 z tych wierszy (np. Średnia). Napisałem funkcję f (t2, v1, df) i po prostu chciałem ją zastosować we wszystkich wierszach używając apply(df, 1, function(x) f(y["t2"], y["v1"], df)
. Czy istnieje lepszy sposób na robienie takich rzeczy w R?
Prawdziwą odpowiedzią jest to, że nie powinieneś używać 'apply' na ramce danych. Co próbujesz zrobić? – joran
Konwersja * występuje, ponieważ twoje 'dane.frame' jest wymuszane na' macierz'. –
Według twoich edycji naprawdę masz dwa różne pytania (IMO). Powiedziałbym, że zadaj drugie pytanie (Twoja edycja) z odpowiednim zestawem danych, próbą i pożądanym wynikiem. –