在我的數據框中,我在列中有一些半結構化數據。拆分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」的所有行的值相同。 這是爲什麼以及如何處理?
感謝
在我的數據框中,我在列中有一些半結構化數據。拆分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」的所有行的值相同。 這是爲什麼以及如何處理?
感謝
如果我們需要前第一|
sub("[|].*", "", df$col1)
#[1] "a" "a b1" "a & b2"
提取字符如果我們想只提取的話
library(stringr)
str_extract(df$col1, "[[:alnum:]]+(?=\\|)")
#[1] "a" "b1" "b2"
你只調用第一個列表的地方第一個列表對象。由於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)
什麼是您預期的輸出?也許'library(stringr); str_extract(df $ col1,「[[:alnum:]] +(?= \\ |)」)' – akrun
'library(tidyr); df%>%separate(col1,into ='col2',sep ='\\ |',extra ='drop',remove = FALSE)' – alistaire
[將列元素分隔成3列(R)] (http://stackoverflow.com/questions/25194174/separating-a-column-element-into-3-separate-columns-r) – alistaire