Ich würde gerne über Spalten in einem Datenrahmen und teilen Sie sie in die basierend auf einem Trennzeichen. Ich verwende tidyr::separate
, was funktioniert, wenn ich eine Spalte gleichzeitig mache.Anwenden tidyr :: über mehrere Spalten trennen
Zum Beispiel:
df<- data.frame(a = c("5312,2020,1212"), b = c("345,982,284"))
df <- separate(data = df, col = "a",
into = paste("a", c("col1", "col2", "col3"),
sep = "_"), sep = ",")
Returns:
a_col1 a_col2 a_col3 b
1 5312 2020 1212 345,982,284
Wenn ich versuche, den gleichen Vorgang über jede Spalte von df
R auszuführen gibt einen Fehler
Zum Beispiel habe ich diese verwendet für Schleife:
for(col in names(df)){
df <- separate(data = df, col = col,
into = paste(col, c("col1", "col2", "col3),
sep = "_"), sep = ",")
}
Ich hatte erwartet, die folgende Ausgabe zu erhalten:
a_col1 a_col2 a_col3 b_col1 b_col2 b_col3
1 5312 2020 1212 345 982 284
jedoch R gibt diese Fehler:
Error in if (!after) c(values, x) else if (after >= lengx) c(x, values) else c(x[1L:after], :
argument is of length zero
Gibt es eine andere Art und Weise tidyr::separate
über mehrere Spalten in einem Datenrahmen zu bewerben?
'df%>% sammeln() %>% seperate_rows (Wert)%>% muate (key = paste0 (Schlüssel, '_col', 1: 3))%>% spread (Schlüssel, Wert) ', aber das ist wirklich nicht einfacher als zweimal 'separate' aufzurufen. – alistaire
... oder Sie können Ihr Original mit der SE 'seperate_' reparieren, dh' für (Name in Namen (df)) df <- seperate_ (df, name, in = paste0 (Name, '_col', 1: 3))) ', aber dieser Stil macht mich sehr unruhig. – alistaire