Worin liegt der Unterschied?

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Worin liegt der Unterschied?

Beitrag von wbart »

Hallo zusammen,

ich habe folgende Beobachtung gemacht:

es sei ein beliebiger datensatz, den ich als x abgespeichert habe

Code: Alles auswählen

x <- as.data.frame(datensatz)
dann wollte ich eine bestimmte Spalte als Zeilennamen definieren

Code: Alles auswählen

rownames(x) <- datensatz[,1]
Es erscheint die Fehlermeldung:

Code: Alles auswählen

Error in `.rowNamesDF<-`(x, value = value) : ungültige 'row.names' Länge

Code: Alles auswählen

rownames(x)<- datensatz$Spaltennahme
funktioniert.

in anderen Foren war die Lösung mit Adressierung [,] beschrieben. Ich frage aus prinzipiellen Gründen da man ja häufiger mal über [,] adressiert.

LG
Werner

diesem Datensatz
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Worin liegt der Unterschied?

Beitrag von bigben »

Hallo,

das hier läuft bei mir glatt durch:

Code: Alles auswählen

bsp <- data.frame(x = LETTERS[1:10])
print(bsp)
rownames(bsp) <- bsp[,1]
print(bsp)
Wenn ich Deinen Fehler rekonstruieren will, kann ich anstelle des data.frames ein tibble verwenden:

Code: Alles auswählen

library(tibble)
bsp <- tibble(x = 11:21)
print(bsp)
rownames(bsp) <- bsp[,1]
print(bsp)
Aber von einem tibble war ja nicht die Rede. Kannst Du ein reproduzierbares Minimalbeispiel posten?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Worin liegt der Unterschied?

Beitrag von jogo »

Hallo Werner,

da datensatz eventuell kein Dataframe ist (siehe x <- as.data.frame(datensatz)), solltest Du für das Setzen der Zeilennamen vielleicht besser

Code: Alles auswählen

rownames(x) <- x[,1]
verwenden.
Wenn allerdings datensatz kein Dataframe ist, wie ist dann datensatz$Spaltennahme möglich? ... das geht sonst nur bei Listen ... dann handelt es sich aber nicht um einen Spaltennamen sondern um den Namen eines Elementes der Liste. (Ein Hund wird nicht zur Katze, indem Du ihn Katze nennst.)

Bitte zeig uns mal den output von

Code: Alles auswählen

str(datensatz)
Gruß, Jörg
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: Worin liegt der Unterschied?

Beitrag von wbart »

Hallo jogo,

der output des datensatzes mit str() ist:

> str(y)
'data.frame': 35137 obs. of 27 variables:
$ 1A_0h : num -1.243 5.227 -1.531 -3.962 0.445 ...
$ 1A_20h: num -0.93 5.201 -1.238 NA 0.149 ...
$ 1A_3h : num -1.345 5.063 -1.398 -5.843 0.792 ...
$ 1B_0h : num -0.592 6.029 -1.259 -5.165 -0.452 ...
$ 1B_20h: num -1.3 5.45 -1.52 -5.61 NA ...
$ 1B_3h : num -1.479 5.372 -1.468 -5.527 0.734

Viele Grüße
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Worin liegt der Unterschied?

Beitrag von jogo »

Hallo Werner,

Du willst wirklich Gleitkommazahlen als Zeilennamen einsetzen?
Warum willst Du dies tun?

Gibt es NAs in der ersten Spalte? (was liefert any(is.na(y[[1]]))? )

Mit NAs konnte ich einen Fehler provozieren:

Code: Alles auswählen

datensatz <- BOD
x <- as.data.frame(datensatz)
x[3,2] <- NA
rownames(x) <- x[,2]
Wenn das alles keine Aufklärung bringt, benötigen wir ein reproduzierbares Beispiel. Mit dput(head(y)) kannst Du output generieren, den Du hier im Forum posten kannst.
Auch der output von sessionInfo() könnte sachdienlich sein.

Gruß, Jörg
Antworten