2016-07-07 79 views
-1

在我的數據框中,我在列中有一些半結構化數據。拆分R中的列

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

from this dataframe$col1我只想提取「|」之前的第一個單詞。

我試圖用這個

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

但結果卻是有「A」的所有行的值相同。 這是爲什麼以及如何處理?

感謝

+1

什麼是您預期的輸出?也許'library(stringr); str_extract(df $ col1,「[[:alnum:]] +(?= \\ |)」)' – akrun

+0

'library(tidyr); df%>%separate(col1,into ='col2',sep ='\\ |',extra ='drop',remove = FALSE)' – alistaire

+1

[將列元素分隔成3列(R)] (http://stackoverflow.com/questions/25194174/separating-a-column-element-into-3-separate-columns-r) – alistaire

回答

0

如果我們需要前第一|

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

提取字符如果我們想只提取的話

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

你只調用第一個列表的地方第一個列表對象。由於R的回收規則,該字符在列中的每一行都會重複。

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

對於列拆分,我喜歡將strsplit()和sapply()結合使用。這是Hadley Wickham已經在SO上發佈的內容。

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

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