Seite 1 von 1

filtern mit subset? Ergebnis nicht als tibble darstellen

Verfasst: Di Mär 23, 2021 8:53 pm
von nulli
Liebe Leute,

ich brauche eure Hilfe!

Ich möchte mehrere Überprüfungen meiner erhobenen Daten durchführen:

Code: Alles auswählen

subset(data, data$Alter > data$Betriebszugehörigkeit)
Damit soll z.B. überprüft werden, ob das angegebene Alter größer ist, als die angegebene Betriebszugehörigkeit in Jahren.

Bei allen meinen Überprüfungen wird als Ergebnis angezeigt:
0 rows | 1-10 of 146 columns

Wenn ich die Datei jetzt als PDF exportieren, wird mir aber immer das gesamte tibble ausgedruckt. Somit habe ich 5 Seiten, die inhaltlich keinen Mehrwert bieten. Was muss ich machen, damit als Ergebnis nur angezeigt wird, dass diese 0 ist?

Oder gibt es dafür einen anderen Befehl, der das gewünschte Ergebnis einfacher darstellt?

Vielen Dank!

Re: filtern mit subset? Ergebnis nicht als tibble darstellen

Verfasst: Di Mär 23, 2021 9:11 pm
von EDi
Du meinst ?nrow

Die data$ sind unnötig in subset.

Re: filtern mit subset? Ergebnis nicht als tibble darstellen

Verfasst: Di Mär 23, 2021 9:24 pm
von nulli
super, damit funktioniert es. Vielen Dank für die Lösung und den Hinweis :)

Re: filtern mit subset? Ergebnis nicht als tibble darstellen

Verfasst: Mi Mär 24, 2021 7:50 am
von jogo
Hallo nulli,

wenn es nur um die Anzahl geht, ist subset() ein zu großes Geschütz:

Code: Alles auswählen

sum(data$Alter > data$Betriebszugehörigkeit)
oder

Code: Alles auswählen

with(data, Alter > Betriebszugehörigkeit)
Gruß, Jörg

Re: filtern mit subset? Ergebnis nicht als tibble darstellen

Verfasst: Mo Jun 14, 2021 9:44 am
von nulli
Hallo Jörg,

auch für diesen Tipp vielen Dank :-)

Jetzt habe ich bei einer Überprüfung das "Problem", dass eine Variable nur Kategorial ist.

Ich würde gerne überprüfen, ob die Teamgröße (metrisch) die Unternehmensgröße (kategorial) übersteigt. Hiermit soll nur überprüft werden, ob es unrealistische Antworten gibt und ich würde davon ausgehen, dass es keine gibt. Daher möchte ich mir alle Werte anzeigen lassen, die unrealistisch sind.

Kategorien der Unternehmensgröße:
1 1-49
2 50-99
3 100-499
4 500-999
5 1000-1499
usw.

Die Überprüfung müsste dann wie folgt funktionieren:
Zeige mir alle Werte...
bei denen Teamgröße < 50 und Kategorie > 1
bei denen Teamgröße < 100 und Kategorie > 2
bei denen Teamgröße < 500 und Kategorie > 3
bzw. anders formuliert:
bei denen Teamgröße zwischen 1-49 und Kategorie > 1
bei denen Teamgröße zwischen 50-99 und Kategorie > 2
bei denen Teamgröße zwischen 100-499 und Kategorie > 3

Den Sinn dieser Überprüfung darf man gerne in Frage stellen, allerdings wüsste ich gerne wie man so etwas macht :-D

Vielen Dank im Voraus!

Re: filtern mit subset? Ergebnis nicht als tibble darstellen

Verfasst: Mo Jun 14, 2021 10:18 am
von jogo
Hallo nulli,

kannst Du bitte mal den output von

Code: Alles auswählen

str(data$Kategorie)
in Deine nächste Nachricht kopieren?

Gruß, Jörg

Re: filtern mit subset? Ergebnis nicht als tibble darstellen

Verfasst: Mo Jun 14, 2021 11:09 am
von bigben
Hallo nulli,

es gibt immer verschiedene Ansätze. Man könnte eine neue metrische Variable erstellen, deren Inhalt von der Unternehmensgröße abhängt. Immer wenn die Unternehmensgröße "1 bis 49" ist, ist die Hilfsvariable 49, immer wenn die Unternehmensgröße "50 bis 99" ist, ist die Hilfsvariable 99 und so weiter. Hinweise, wie das gehen kann, finden sich hier: http://forum.r-statistik.de/viewtopic.php?f=20&t=2162

Jetzt kannst Du einfach die Teamgröße mit dieser Hilfsvariable vergleichen, weil beides ja metrische Variablen sind.


Ein ganz anderer Weg:


nulli hat geschrieben: Mo Jun 14, 2021 9:44 amZeige mir alle Werte...
bei denen Teamgröße < 50 und Kategorie > 1
bei denen Teamgröße < 100 und Kategorie > 2
bei denen Teamgröße < 500 und Kategorie > 3
bzw. anders formuliert:
bei denen Teamgröße zwischen 1-49 und Kategorie > 1
bei denen Teamgröße zwischen 50-99 und Kategorie > 2
bei denen Teamgröße zwischen 100-499 und Kategorie > 3
Das ist pro Zeile eine logische UND-Verknüpfung und die Zeilen sind untereinander mit einem ODER verknüpft. Logisches UND ist in R '&', logisches ODER ist '|'.

In Pseudocode also

Code: Alles auswählen

ifelse((Teamgröße < 50 & Kategorie > 1) |
       (Teamgröße < 100 & Kategorie > 2) |
       (Teamgröße < 500 & Kategorie > 3) |
       (Teamgröße < 1000 & Kategorie > 4),
       yes = "Team kleiner", no = "Team größer")
HTH,
Bernhard

Re: filtern mit subset? Ergebnis nicht als tibble darstellen

Verfasst: Mo Jun 14, 2021 2:48 pm
von jogo
... oder Du bestimmst die Kategorien nochmal selbst und hast danach noch einen einfachen Vergleich:

Code: Alles auswählen

x <- c(1, 49,
50, 99, 
100, 499, 
500, 999,
1000, 1499)

data.frame(x,
y=cut(x, breaks=c(1, 50, 100, 500, 1000, Inf), labels=1:5, right=FALSE))
Gruß, Jörg

Re: filtern mit subset? Ergebnis nicht als tibble darstellen

Verfasst: Mo Jun 14, 2021 3:24 pm
von nulli
Hallo zusammen,

vielen Dank für die schnelle Hilfe und die verschiedenen Ansätze!

Ich habe es jetzt mit den Hilfsvariablen gelöst:

Code: Alles auswählen

data$Unternehmensgröße_metrisch <- recode(data$Unternehmensgröße, "1=49; 2=99";....)
nrow(data[data$Unternehmensgröße_metrisch < data$Teamgröße, ])  
Wie erwartet gibt ist das Ergebnis 0 und es gibt somit keine unrealistischen Aussagen :-)