dplyr package

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
mango52
Beiträge: 12
Registriert: Mo Jan 18, 2021 11:15 am

dplyr package

Beitrag von mango52 »

Hallo,
ich habe eine Frage, ich habe ein dataframe und würde gerne Zeilen rausfiltern die gewisse Bedingungen erfüllen, nämlich "tw <0" (das funktioniert) und "on>tw" (das funktioniert nicht). Ich hab den Code unten reinkopiert. (Es wäre wichtig dass ich das dplyr package verwende)
Danke im Voraus für eure Hilfe
LG

Code: Alles auswählen

library(dplyr)

column1 <- c(1,2,4,4,5,3,6)
column2 <- c(3,3,6,3,2,6,4)
column3 <- c(3,5,2,6,4,6,3)
results <- data.frame(column1, column2, column3)

fun <- function(dataset, on, tw, thr){
  fun_delete <<- dataset %>%
    filter(!is.na(!!as.name(on))) %>%
    filter(!is.na(!!as.name(tw))) %>%
    filter(!is.na(!!as.name(thr))) %>%
    filter(tw < 0) %>%
    filter(on > thr) %>%
    select(on, tw, thr)
}

fun(results, column1, column2, column3)
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: dplyr package

Beitrag von EDi »

Ich hab dein Beispiel

1. etwas verändert, um auch was übrig zu lassen bzw. was zum testen zu haben
2. den unschönen <<- Operator rausgenommen (*)

Dann solltest du dir auch die Vignette zu "Programming with dplyr" zu gemüte führen: https://cran.r-project.org/web/packages ... mming.html

Das ist IMO nicht ganz trivial & es hat auch in den letzen Jahren einiges an Iterationen gegeben...

Code: Alles auswählen

library(dplyr)

column1 <- -c(1,2,4,4,5,3,6, NA, 1, -1)
column2 <- c(3,3,6,3,2,6,4, 1, NA, 1)
column3 <- -c(3,5,2,6,4,6,3, 2, 3, 1)
x <- runif(10)
results <- data.frame(column1, column2, column3, x)

fun <- function(dataset, on, tw, thr){
  dataset %>%
    filter(!is.na( {{on}} )) %>%
    filter(!is.na( {{tw}} )) %>%
    filter(!is.na( {{thr}} )) %>%
    filter( {{on}} < 0) %>%
    filter( {{on}} > {{thr}} ) %>%
    select( {{on}} , {{tw}}, {{thr}})
}

fun(results, column1, column2, column3)
Kommt auch drauf an, wie du das verwenden möchtest. Vielleicht macht es Sinn, die 3 Parameter als character zu übergeben? Dann kann man das .data pronoun verwenden...

(*) Unschön, weil es programmcode wesentlich schlechter verständlich und wartbar macht: Es verändert das GlobalEnv schwer vorsehbar (was ist, wenn die Variable vorher schon definiert war) und somit kann man nicht den Programmablauf direkt ableiten.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten