Seite 1 von 1

Subset für logische opperatoren

Verfasst: Fr Mär 26, 2021 1:12 pm
von Zabel
Hallo Forum,

ich habe in kleines Problem und bräuchte Hilfe. Ich möchte ein Subset erstellen für Werte aus data , die größer sind als der Zeilenmean.

str:
str(data)
tibble [1,128 x 34,391] (S3: tbl_df/tbl/data.frame)
$ MCALDT: Date[1:1128], format: "1927-01-31" "1927-02-28" "1927-03-31" "1927-04-30" ...
$ 10000 : num [1:1128] NA NA NA NA NA NA NA NA NA NA ...
$ 10001 : num [1:1128] NA NA NA NA NA NA NA NA NA NA ...
$ 10002 : num [1:1128] NA NA NA NA NA NA NA NA NA NA ...
$ 10003 : num [1:1128] NA NA NA NA NA NA NA NA NA NA ...
$ 10005 : num [1:1128] NA NA NA NA NA NA NA NA NA NA ...
$ 10006 : num [1:1128] -0.0135 0.0662 -0.0281 -0.0147 0.0782 ...
Idealerweise sollte das subset die gleiche Größe wie data haben, allerdings nur die Werte enthalten, die größer als der Zeilenmean sind

Für

Code: Alles auswählen

means<-rowMeans(data[2:ncol(data)],na.rm=TRUE)

winner<-subset(data>means)
bekomme ich leider nur die logischen Statements (bzw. TRUE/FALSE für die Werte) allerdings soll statt TRUE, der Wert aus data darin stehen und für FALSE ein NA. Kann mir jemand helfen?

Vielen Dank im voraus und ein schönes Wochenende!

LG Zabel

Re: Subset für logische opperatoren

Verfasst: Fr Mär 26, 2021 1:39 pm
von bigben
Hallo Zabel,
Zabel hat geschrieben: Fr Mär 26, 2021 1:12 pmIch möchte ein Subset erstellen für Werte aus data , die größer sind als der Zeilenmean.
Das verstehe ich nicht. Ein Subset gibt es nur von Data.frames, nicht von Werten. Im Subset sind alle Spalten enthalten, nicht einzelne Werte aus den Spalten.
Idealerweise sollte das subset die gleiche Größe wie data haben, allerdings nur die Werte enthalten, die größer als der Zeilenmean sind
Das verstehe ich nicht. Das Subset kann nur dann die gleiche Größe wie data haben wenn es identisch zu data ist.

Bist Du ganz sicher, dass das was Du haben willst ein Subset ist? Wenn nein, erklär es nochmal ohne das Wort.

LG,
Bernhard

Re: Subset für logische opperatoren

Verfasst: Fr Mär 26, 2021 4:20 pm
von Zabel
Hey Bernhard,

danke für die schnelle Antwort. Subset ist schlecht ausgedrückt von mir. Sorry!

Ich meine, dass in dem df `data` lediglich die Werte verbleiben sollen, die größer als der jeweilige rowmean sind.

Ich hoffe damit wird der gewünschte Ouput verständlicher.

LG

Re: Subset für logische opperatoren

Verfasst: Fr Mär 26, 2021 5:57 pm
von bigben
Ist das in der quote oben ein Blick in einen Beispieldatensatz oder schon ein gewünschter Output?

Re: Subset für logische opperatoren

Verfasst: Fr Mär 26, 2021 6:03 pm
von Zabel
Das ist die str des Beispieldatensatzes.

Und davon sollen nur die Werte, die größer als der Rowmean sind, "über bleiben"

Re: Subset für logische opperatoren

Verfasst: Fr Mär 26, 2021 6:42 pm
von bigben
Ist halt komisch, weil im Beispiel immer nur ein Wert in jeder Zeile steht. Was soll mit den Werten passieren, die nicht über dem Zeilenmittel sind? Sollen die durch NA ersetzt werden?

Re: Subset für logische opperatoren

Verfasst: Fr Mär 26, 2021 7:47 pm
von Zabel
Wie kommst du darauf, dass in jeder Zeile nur ein Wert steht. Das sind Daten für Aktien (bzw. returns) von 1927 - 2020 (1128 Monatsdaten) (Spalte MCALDT) und dann 34.390 weitere Spalten für die jeweiligen Aktien. Somit sind für jeden Zeitpunkt (Monat/Jahr = row) die mtl returns angegeben. Für die jeweiligen Monate gibt es einen Durchschnitt über alle Aktien. Jetzt sollen die Aktien, deren return über dem durchschnittlichen return liegen, herausselektiert werden. Somit ist nicht in jeder Zeile nur ein Wert, sondern mehrere Werte (zwischen 1 und 34390). Deshalb wunderte mich nur die Aussage. Hoffe jetzt ist das etwas besser beschrieben und du kannst evtl. helfen?

LG

Re: Subset für logische opperatoren

Verfasst: Fr Mär 26, 2021 10:34 pm
von bigben
Wie kommst du darauf, dass in jeder Zeile nur ein Wert steht.
Weil alles, was Du bis dahin über die Daten verraten hast so aussieht, und da nur in Spalte 10006 Werte stehen, in allen anderen NA. So komme ich darauf:
Zabel hat geschrieben: Fr Mär 26, 2021 1:12 pmstr:
str(data)
tibble [1,128 x 34,391] (S3: tbl_df/tbl/data.frame)
$ MCALDT: Date[1:1128], format: "1927-01-31" "1927-02-28" "1927-03-31" "1927-04-30" ...
$ 10000 : num [1:1128] NA NA NA NA NA NA NA NA NA NA ...
$ 10001 : num [1:1128] NA NA NA NA NA NA NA NA NA NA ...
$ 10002 : num [1:1128] NA NA NA NA NA NA NA NA NA NA ...
$ 10003 : num [1:1128] NA NA NA NA NA NA NA NA NA NA ...
$ 10005 : num [1:1128] NA NA NA NA NA NA NA NA NA NA ...
$ 10006 : num [1:1128] -0.0135 0.0662 -0.0281 -0.0147 0.0782 ...
Hoffe jetzt ist das etwas besser beschrieben und du kannst evtl. helfen?
Nö, ich hab immer noch keine konkrete Antwort, was statt der kleineren Werte jetzt da stehen soll und kann deshalb auch nicht helfen. Es soll ein Subset von Daten gemacht werden, die so aussehen, nur dass subset nicht gut ausgedrückt ist und die Daten nicht so aussehen. Wahrscheinlich bin ich einfach für diese Aufgabe nicht der richtige und deshalb halte ich mich jetzt aus dem Thread raus.

Gruß,
Bernhard

Re: Subset für logische opperatoren

Verfasst: Sa Mär 27, 2021 12:32 am
von Zabel
okay, finde ich schade, dass du das alles so aufgenommen hast.... tut mir leid.

Ist evtl. etwas trügerisch, da in dem kurzen Ausschnitt nur für die Spalte 10006 (hat nichts mit der Anzahl der Spalten zu tun) returns verfügbar waren (daten verfügbar). Dies bedeutet allerdings nicht, dass nur in einer spalte von den 34390 werte verfügbar sind.

Schade.

Trotzdem ein schönes Wochenende und trotzdem vielen Dank!

Re: Subset für logische opperatoren

Verfasst: Sa Mär 27, 2021 1:24 pm
von EDi
Ich verstehe die Frage auch nicht bzw. was erreicht werden soll. Auch fehlt ein reproduzierbares Beispiel. Deshalb hab ich nichts geantwortet - weil vermutlich unnötig...
tibble [1,128 x 34,391]
Wir habe also 1128 Zeilen und 34391 Spalten.
Ein subset ist eine Teilmenge davon. Das Ergebnis sollte also weniger Zeilen / Spalten haben - das ist hier aber nicht gewollt ?!

Bitte ein reproduzierbares Beispiel posten und eine genaue Beschreibung des Ergnisses (am besten ein data.frame).