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