Rozważ następujące kolumny w moim zestawie danych:

DF $ PT: zawierają ciągi z powtarzającym się wzorem. Przykład: [1] "60d 0%" "5m 2%" "4 2ND M 5%" ...

DF $ Data: Kolumna dat [1] "2021-01-18" "2021-01-18" "2021-01-18" ...

Udało mi się utworzyć funkcję, która odczytuje wejścia z powyższych kolumn, sprawia, że operacje z nimi i zwraca inną datę (nazywajmy go dat2). Funkcja działa dobrze (przetestowałem go, przechodząc ręcznie argumenty):

FUNKCJA1 (PT, DATA) { # Jeśli / Else Chain, aby wygenerować date2 z PT i date #Funkcja zwraca (Date2) lub NA Według warunków }

Na razie w porządku. Problem pojawia się, gdy próbuję użyć saply, aby zastosować moją funkcję1 dla każdej kadencji kolumn DF $ PT i przechowywać wyjście (które chcę być pojedynczą datą, albo NA dla każdego terminu w DF $ PT) w DF $ Nowy -Col, taki jak:

DF $ New_col <- Sapply (DF $ PT, Funkcja1, Data = DF $ Data)

Ale zamiast mieć oczekiwaną wydajność w formacie DF $ New_Col w dniu:

Date2a Date2B Date2C Date2D ...

Uzyskaj tylko pierwsze wyjście powtórzone wszędzie, aw sznurku formatu daty: 18705 18705 18705 18705 ...

Co może się traktować i jak rozwiązać go, aby uzyskać poprawne obliczenia daty2 w DF $ New_Col?

Dziękuję za pomoc!

0
mexaria 18 styczeń 2021, 20:01

1 odpowiedź

Najlepsza odpowiedź

Ponieważ R jest weekorowany, możesz utworzyć nowe kolumny DF bezpośrednio z istniejących kolumn. Na przykład.:

cars <- mtcars
cars$new <- ifelse(cars$cyl == 6 & cars$mpg > 20, "NewVal", NA)
head(cars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb    new
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 NewVal
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 NewVal
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1   <NA>
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 NewVal
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2   <NA>
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1   <NA>
0
SteveM 18 styczeń 2021, 17:15