Mam kolumnową ramkę danych 58, muszę zastosować transformację $ log (x_ {i, j} +1) $ do wszystkich wartości w pierwszych 56 kolumnach. Jakiej metody mogę użyć, aby wykonać to najskuteczniej? Zakładam, że jest coś, co pozwoliłoby mi to zrobić, zamiast używać tylko pętli do przepuszczenia całej ramki danych.Zastosuj funkcję do każdej wartości w ramce danych R
Odpowiedz
Powinieneś być w stanie po prostu zapoznać się z kolumn, które chcesz, i robić operację, tj odpowiedź
df.log[,1:56] <- log(df[,1:56]+1)
alexwhan jest właśnie dla dziennika (i prawdopodobnie powinien być wybrany jako prawidłową odpowiedź). Jednak działa tak czysto, ponieważ log jest wektoryzowany. Dosyć często doświadczałem specjalnego bólu niewizułowanych funkcji. Kiedy zaczynałem od R i nie rozumiałem dobrze rodziny stosującej, bardzo często uciekałem się do brzydkich pętli. Tak więc, dla tych, którzy mogą natknąć się na to pytanie, którzy nie mają wektoryzowanych funkcji, przedstawiam następujący dowód koncepcji.
#Creating sample data
df <- as.data.frame(matrix(runif(56 * 56), 56, 56))
#Writing an ugly non-vectorized function
logplusone <- function(x) {log(x[1] + 1)}
#example code that achieves the desired result, despite the lack of a vectorized function
df[, 1:56] <- as.data.frame(lapply(df[, 1:56], FUN = function(x) {sapply(x, FUN = logplusone)}))
#Proof that the results are the same using both methods...
#Note: I used all.equal rather than all so that the values are tested using machine tolerance for mathematical equivalence. This is probably a non-issue for the current example, but might be relevant with some other testing functions.
#should evaluate to true
all.equal(log(df[, 1:56] + 1),as.data.frame(lapply(df[, 1:56], FUN = function(x) {sapply(x, FUN = logplusone)})))
Należy zauważyć, że chociaż to nie będzie działać dla konkretnego przykładu - można obejść funkcję czasami nie jest wektoryzowany, uruchamiając go za pomocą funkcji "Wektoryzacji". – Dason
Mimo że zadziała, jeśli podwoisz wektoryzację, np. Vectorize (Vectorize (logplusone, "x"), "x") – russellpierce
... jednak niektóre funkcje wektoryzacji znajdują się trochę po stronie trudnej do odczytania, dlatego preferuję rozwiązanie przedstawione w mojej odpowiedzi po prostu dlatego, że łatwiej jest ja (kiedy wracam do kodu), aby dowiedzieć się, jak to działa. – russellpierce
- 1. Zastosuj funkcję na pandasowej ramce danych
- 2. R: Zastosuj funkcję do konkretnych kolumn zachowując pozostałą ramkę danych
- 3. Wypełnianie wartości w ramce danych w R?
- 4. Zastosuj funkcję do każdej warstwy 3d tablicy, wracając tablicę
- 5. Zastosuj funkcję do grup wewnątrz danych.frame w R
- 6. Zastosuj funkcję do wszystkich kombinacji parami elementów listy w R
- 7. Szybkie zastępowanie wartości w ramce danych w R
- 8. Zastosuj funkcję do ramki danych MultiIndex z pand/python
- 9. Zastosuj zapytanie mysql do każdej tabeli w bazie danych
- 10. Zastosuj funkcję wiersz mądry na ramce danych Pandy na kolumnach z wartościami liczbowymi
- 11. Identyfikowanie duplikatów kolumn w ramce danych R
- 12. R Zastosuj() funkcja na konkretnych kolumnach kolumny danych
- 13. Zastosuj funkcję do drugiej kolumny w grupie danych pandy o numerze
- 14. suma zmiennych w ramce danych R
- 15. R - scalić listę ramek danych w jednej ramce danych z brakujących wartości przez rząd
- 16. Zastosuj listę funkcji do wartości w Ramda
- 17. Zastosuj funkcję do każdego rzędu Spark DataFrame
- 18. Potrzebuję "binaryzacji" niektórych danych w ramce danych w R
- 19. Jak zamienić wartość w ramce danych w R?
- 20. Znajdź średnią każdej z trzech kolumn w ramce danych Pandy
- 21. Suma wszystkich wartości w ramce danych
- 22. Wektoryzowane przeglądanie wartości w ramce danych Pandy
- 23. Zwiększenie o jedną do każdej zduplikowanej wartości w R
- 24. Jak pokolorować określone komórki w ramce danych/tabeli w R?
- 25. Jak dodać kolumnę w ramce danych w R
- 26. Zastąp wartości w ramce danych na podstawie innej ramki danych w R
- 27. Wklej razem każdą parę kolumn w ramce danych w R?
- 28. Zastosuj funkcję do wszystkich elementów macierzy Eigen
- 29. Zastosuj funkcję na zbiorczych wartościach serii pand
- 30. Jak warunkowo wybierz wartości/filtrów w każdej grupie w R
lub 'df [1: 56] <- log (df [1: 56] +1)' –