2016-07-07 17 views
-1

In meinem Datenrahmen habe ich einige semi-strukturierte Daten in einer Spalte.Teilen Sie eine Spalte in R

df 
col1 
a|b|c 
a b1|b|c 
a & b2|b|c 3 

von diesem dataframe$col1 ich nur das erste Wort vor dem extrahieren möchten „|“.

ich versuchte, diesen

df$col2 <- unlist(strsplit(as.character(df$a),"[|]"))[[1]][1] 

verwenden, aber das Ergebnis denselben Wert wurde mit „A“ auf allen Reihen. Warum ist das und wie geht das?

Dank

+1

Was ist Ihre erwartete Ausgabe? Vielleicht Bibliothek (stringr); str_extract (df $ col1, [[: alnum:]] + (? = \\ |) ") – akrun

+0

' library (tidyr); df%>% seperate (col1, in = 'col2', sep = '\\ |', extra = 'fallen', entfernen = FALSE) ' – alistaire

+1

Mögliche Duplikate von [Trennen eines Spaltenelements in 3 separate Spalten (R)] (http://stackoverflow.com/questions/25194174/separating-a-column-element-into-3-separate-columns-r) – alistaire

Antwort

0

Wenn wir die Zeichen vor dem ersten |

sub("[|].*", "", df$col1) 
#[1] "a"  "a b1" "a & b2" 

extrahieren müssen, wenn wir nur die Worte

library(stringr) 
str_extract(df$col1, "[[:alnum:]]+(?=\\|)") 
#[1] "a" "b1" "b2" 
0

Du nur den Aufruf der ersten Listenplatz extrahieren möchten des ersten Listenobjekts. Aufgrund der Recycling-Regel von R wird dieses Zeichen für jede Zeile in der Spalte wiederholt.

t <- c("a|junk", "a b|junk", "a b1|junk") 
unlist(strsplit(as.character(t),"[|]"))[[1]][1] 
[1] "a" 

Für Spaltenaufteilung, verwende ich gerne strsplit() in Kombination mit sapply(). Das hatte Hadley Wickham schon auf SO geschrieben.

df$col2 <- sapply(strsplit(as.character(df$a),"[|]"), "[", 1) 

https://stackoverflow.com/a/1355660/1146646

Verwandte Themen