Seite 1 von 1

Spalten zusammenfügen

Verfasst: Mo Sep 14, 2020 11:39 pm
von LeaRn
Hallo
Ich habe folgendes Problem:

Code: Alles auswählen

data.frame(
  x = as.numeric(c("NA", "NA", "NA", 1, 6, 3)),
  y = as.numeric(c(1, 2, 9, "NA", "NA", "NA")),
  z = as.factor(c("a", "a", "a", "b", "b", "b")),
  soll = as.numeric(c(1,2,9,1,6,3))
)
Ich habe einen Datensatz mit den Spalten x, y und z. Ich möchte nun die Spalte "soll" erhalten. Wie kann ich das erreichen?

Danke schon im Voraus.
Liebe Grüsse
LeaRn

Re: Spalten zusammenfügen

Verfasst: Di Sep 15, 2020 8:01 am
von student
Hallo LeaRn,

so:

Code: Alles auswählen

Daten <- data.frame(
  x = as.numeric(c("NA", "NA", "NA", 1, 6, 3)),
  y = as.numeric(c(1, 2, 9, "NA", "NA", "NA")),
  z = as.factor(c("a", "a", "a", "b", "b", "b")),
  soll = as.numeric(c(1,2,9,1,6,3))
)

Daten$soll
[1] 1 2 9 1 6 3

Re: Spalten zusammenfügen

Verfasst: Di Sep 15, 2020 11:48 am
von LeaRn
Danke für die Antwort.
Der Datensatz besteht nur aus den drei Zeilen x, y und z. Die Spalte "soll" sollte das gewünschte Resultat darstellen, das ich nicht hinbekomme. Diese Spalte existiert also eigentlich nicht. Ich möchte sie aus den Spalten x und y zusammenfügen.
Folgende Dinge habe ich schon probiert:

Code: Alles auswählen

library(tidyverse)

Daten %>%
  mutate(
    soll1 = 
      x + y
  ) #gibt aber NAs

Daten$soll2 <- paste(Daten$x, Daten$y, sep = "_") #hier könnte man mit regular expressions weiter machen
Ich finde leider keine saubere Lösung, um die Spalten x und y so zusammenzufügen, dass daraus Spalte "soll" wird.
Liebe Grüsse
LeaRn

Re: Spalten zusammenfügen

Verfasst: Di Sep 15, 2020 12:14 pm
von bigben
Ist das sauber genug?

Code: Alles auswählen

d <- data.frame(
        x = as.numeric(c("NA", "NA", "NA", 1, 6, 3)),
        y = as.numeric(c(1, 2, 9, "NA", "NA", "NA")),
        z = as.factor(c("a", "a", "a", "b", "b", "b")),
        soll = as.numeric(c(1,2,9,1,6,3))
    )

d$soll2 <- rowSums(d[,c("x", "y")], na.rm = TRUE)

d$soll3 <- apply(d[1:2], 1, function(x) sum(x, na.rm = TRUE))

ergänzend darf ich sagen, dass Du bei der Definition des dataframes einfach nur die Anführungszeichen um die NA weglassen musst. Dann sparst Du Dir das ganze as.numeric Gedöns:

Code: Alles auswählen

d <- data.frame(
        x = c(NA, NA, NA, 1, 6, 3),
        y = c(1, 2, 9, NA, NA, NA),
        z = c("a", "a", "a", "b", "b", "b"),
        soll = c(1,2,9,1,6,3),
        stringsAsFactors = TRUE
    )
LG,
Bernhard

Re: Spalten zusammenfügen

Verfasst: Di Sep 15, 2020 1:15 pm
von LeaRn
Danke für die Antwort.
Das ist genau was ich gesucht habe.
bei der Definition des dataframes einfach nur die Anführungszeichen um die NA weglassen musst.
Das habe ich nicht gewusst, Danke.

Liebe Grüsse
LeaRn

Re: Spalten zusammenfügen

Verfasst: Di Sep 15, 2020 2:51 pm
von EDi
Was soll passieren, wenn beide NA sind oder beide nicht NA sind?

Hier mal ein Beispiel

Code: Alles auswählen

df <- data.frame(
  x = c(NA, NA, NA, 1, 6, 3, NA, 2),
  y = c(1, 2, 9, NA, NA, NA, NA, 1),
  z = c("a", "a", "a", "b", "b", "b", "c", "c")
)

df

rowSums(df[,c("x", "y")], na.rm = TRUE)

Re: Spalten zusammenfügen

Verfasst: Di Sep 15, 2020 3:38 pm
von student
Hallo LeaRn,

das freut mich ja, dass Du Deine Frage im 2. Post spezifizierst hast. Das im 1. Post zu tun, hätte Arbeit gespart....

Re: Spalten zusammenfügen

Verfasst: Di Sep 15, 2020 3:49 pm
von bigben
@EDi Das ist ja spannend - und bestimmt nicht das Verhalten, das ich erwartet hätte. Da kann es unter Umständen schlau sein, sich eine eigene Funktion zu schreiben und die Variante mit dem apply zu verwenden, wenn man mit so etwas rechnen muss.

Danke,
Bernhard