Matrix spaltenweise analysieren

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
liftikus

Matrix spaltenweise analysieren

Beitrag von liftikus »

Hi liebes R-Team,

ich würde gerne in einer Matrix herausfinden, wenn in einer Spalte der Wert größer ist als null, soll er mir ein true geben.
Das true soll also dafür stehen, ja, in dieser Spalte ist mindestens ein Wert größer Null.


Ein kleines Beispiel:

Code: Alles auswählen

matrix(runif(16,min=-1,max=0.1), 4,4)
[,1] [,2] [,3] [,4]
[1,] -0.12327112 -0.25991320 -0.86468966 0.05793104
[2,] -0.49583743 -0.04394065 -0.08619703 -0.58041843
[3,] -0.32514782 -0.56218913 -0.67568114 -0.48938184
[4,] 0.07527876 -0.44205108 -0.36467984 -0.91119371

In diesem Fall also sollte das Ergebnis ein Vektor sein, der folgendermaßen aussieht (true, false, false, true).
Auch wenn in einer Spalte zwei oder mehrere Werte über null sind, soll es dafür nur ein true geben.

Ich wäre über eure Hilfe sehr dankbar.
Beste Grüße
Pippo
bigben
Beiträge: 2780
Registriert: Mi Okt 12, 2016 9:09 am

Re: Matrix spaltenweise analysieren

Beitrag von bigben »

Code: Alles auswählen

m  <- matrix(runif(16,min=-1,max=0.1), 4,4)
print(m)
apply(m, MARGIN = 2, function(x) any(x>0))
Im Aufruf von apply() bestimmt der Parameter "MARGIN", ob Du zeilenweise oder spaltenweise suchst. 1 sind Zeilen, zwei sind Spalten. Wenn die Bedingung etwas komplexer wird als "mindestens eins größer als Null", dann ist es meist sinnvoller, anstelle der anonymen Funktion eine mit Namen zu schreiben. Also so:

Code: Alles auswählen

m  <- matrix(runif(16,min=-1,max=0.1), 4,4)
print(m)
apply(m, MARGIN = 2, function(x) any(x>0))
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Matrix spaltenweise analysieren

Beitrag von jogo »

Hallo Pippo,

willkommen im Forum!
Hier noch eine kleine Variante zu der Lösung von Bernhard:

Code: Alles auswählen

set.seed(2017)
X <- matrix(runif(20,min=-1,max=0.1), 5,4)
apply(X, 2, function(spalte) any(spalte>0))
Gruß, Jörg
liftikus

Re: Matrix spaltenweise analysieren

Beitrag von liftikus »

Hallo Bernard, Hallo Jörg,

beide Varianten klappen sehr gut. Habt vielen Dank.

Beste Grüße
Pippo
Antworten