W R mam operację, która tworzy pewne Inf
wartości, gdy przekształcam ramkę danych.
Chciałbym zamienić te Inf
wartości na NA
wartości. Kod, który mam, jest wolny w przypadku dużych danych, czy istnieje szybszy sposób na zrobienie tego?
Powiedzmy, że mam następującą ramkę danych:
dat <- data.frame(a=c(1, Inf), b=c(Inf, 3), d=c("a","b"))
W jednym przypadku działa:
dat[,1][is.infinite(dat[,1])] = NA
Więc uogólniłem to następującą pętlą
cf_DFinf2NA <- function(x)
{
for (i in 1:ncol(x)){
x[,i][is.infinite(x[,i])] = NA
}
return(x)
}
Ale nie sądzę, że to naprawdę wykorzystuje moc R.
r
dataframe
data.table
Ricardo
źródło
źródło
Użyj
sapply
iis.na<-
Lub możesz użyć (dając kredyt @mnel, którego zmiana to jest),
co jest znacznie szybsze.
źródło
is.na<-
że nie zaakceptuje wyniku od,lapply
ale zaakceptuje wynik odsapply
.is.na<-
rozwiązanie jest o wiele wolniejsze.[<-
zmapply
jest nieco szybszy niżsapply
.W przypadku danych mnella czas jest
źródło
Oto rozwiązanie dplyr / tidyverse wykorzystujące funkcję na_if () :
Zauważ, że to zastępuje dodatnią nieskończoność tylko NA. Należy powtórzyć, jeśli ujemne wartości nieskończoności również muszą zostać zastąpione.
źródło
W pakiecie hablar jest bardzo proste rozwiązanie tego problemu:
Które zwracają ramkę danych ze wszystkimi Inf, są konwertowane na NA.
Czasy w porównaniu z niektórymi powyższymi rozwiązaniami. Kod: biblioteka (hablar) biblioteka (data.table)
Wynik:
Wygląda na to, że data.table jest szybsza niż hablar. Ale ma dłuższą składnię.
źródło
Feng Mai ma schludną, odwrotną odpowiedź powyżej, aby uzyskać ujemne i dodatnie nieskończoności:
Działa to dobrze, ale słowo ostrzeżenia nie polega na zamianie w abs (.) Tutaj, aby wykonać obie linie naraz, jak proponuje się w komentarzu za głosowaniem. Będzie wyglądać, jakby to działało, ale zmienia wszystkie wartości ujemne w zbiorze danych na dodatnie! Możesz to potwierdzić:
Dla jednej linii to działa:
źródło
Inne rozwiązanie:
źródło
Możesz także skorzystać z przydatnej funkcji replace_na: https://tidyr.tidyverse.org/reference/replace_na.html
źródło