Seite 1 von 1

dplyr package

Verfasst: Di Jan 25, 2022 7:05 pm
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)

Re: dplyr package

Verfasst: Di Jan 25, 2022 11:11 pm
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.