Seite 1 von 1

Worin liegt der Unterschied?

Verfasst: Do Dez 02, 2021 6:10 pm
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

Re: Worin liegt der Unterschied?

Verfasst: Do Dez 02, 2021 8:07 pm
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

Re: Worin liegt der Unterschied?

Verfasst: Fr Dez 03, 2021 9:10 am
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

Re: Worin liegt der Unterschied?

Verfasst: Fr Dez 03, 2021 10:51 am
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

Re: Worin liegt der Unterschied?

Verfasst: Fr Dez 03, 2021 11:09 am
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