2016-07-07 2 views
-1

В моем кадре данных у меня есть некоторые полуструктурированные данные в столбце.Разделить столбец в R

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

из этого dataframe$col1 Я хочу, чтобы извлечь только первое слово, прежде чем «|».

Я попытался с помощью этого

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

но результат имел такое же значение «а» по всем строкам. Почему это и как с этим справиться?

Благодаря

+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(). Это было то, о чем Хэдли Уикхем уже писал.

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^