2017-01-06 3 views
-1

У меня есть список, созданный в Python, встроенный в ячейку csv. Я пытаюсь принудить элементы к записи в R, но я застрял на одном конкретном векторе, который содержит текст. Причина в том, что, хотя strsplit() отлично работает с числовыми значениями, разбивая на «,», любая встроенная запятая в тексте заставляет один вектор быть длиннее остальных. Ниже я привел воспроизводимый пример. Спасибо за любую помощь, которую вы можете предоставить!Как разбить список Python в R

x <- c("['SPOSORSHIP FOR CONVENTION']", "['GENERAL CONTRIBUTION', 'GENERAL CONTRIBUTION']", 
"['WOMEN & POPULATION']", "['PROGRAM SUPPORT', 'PROGRAM SUPPORT']", 
"['MULTIPLE GRANTS FOR MULTIPLE PURPOSES']", "['IMPROVING NATIONAL PARKS']", 
"['general operating support']", "['Civic Engagement', 'Animal Welfare', 'Religion']", 
"['RESEARCH SUBAWARD']", "['OPERATIONAL SUPPORT', 'OPERATIONAL SUPPORT']", 
"['PROMOTE FILM INDUSTRY']", "['TO SUPPORT PUBLIC AFFAIRS PROGRAMS', 'TO SUPPORT PUBLIC AFFAIRS PROGRAMS', 'TO SUPPORT PUBLIC AFFAIRS PROGRAMS', 'TO SUPPORT PUBLIC AFFAIRS PROGRAMS', 'TO SUPPORT PUBLIC AFFAIRS PROGRAMS', 'TO SUPPORT PUBLIC AFFAIRS PROGRAMS']", 
"['10TH ANNUAL GREAT LAKES RESTORATION CONFERENCE AND PETER WEGE TRIBUTE LUNCHEON']", 
"['Conservation', 'Conservation']", "['FOR GENERAL OPERATING SUPPORT']" 
) 
+0

все в одинарных кавычках должно быть уникальным элементом в новом символе символов. так что это будет аналогично strsplit, а затем unlist ... – StanO

+0

Можете ли вы отредактировать вопрос и уменьшить размер вашего примера до минимально необходимого для воссоздания проблемы? –

ответ

1

Возможно, это поможет. Я сначала удалить '[и '], а затем разделить на','

cleeaned_text = gsub("(^\\['+)|('\\]\\b)",'',x) #remove '[ and ]' 
unlist(strsplit(cleeaned_text, "', '")) #split on ', ' 
[1] "SPOSORSHIP FOR CONVENTION"              
[2] "GENERAL CONTRIBUTION"               
[3] "GENERAL CONTRIBUTION"               
[4] "WOMEN & POPULATION"                
[5] "PROGRAM SUPPORT"                
[6] "PROGRAM SUPPORT"                
[7] "MULTIPLE GRANTS FOR MULTIPLE PURPOSES"           
[8] "IMPROVING NATIONAL PARKS"              
[9] "general operating support"              
[10] "Civic Engagement"                
[11] "Animal Welfare"                 
[12] "Religion"                  
[13] "RESEARCH SUBAWARD"                
[14] "OPERATIONAL SUPPORT"               
[15] "OPERATIONAL SUPPORT"               
[16] "PROMOTE FILM INDUSTRY"               
[17] "TO SUPPORT PUBLIC AFFAIRS PROGRAMS"            
[18] "TO SUPPORT PUBLIC AFFAIRS PROGRAMS"            
[19] "TO SUPPORT PUBLIC AFFAIRS PROGRAMS"            
[20] "TO SUPPORT PUBLIC AFFAIRS PROGRAMS"            
[21] "TO SUPPORT PUBLIC AFFAIRS PROGRAMS"            
[22] "TO SUPPORT PUBLIC AFFAIRS PROGRAMS"            
[23] "10TH ANNUAL GREAT LAKES RESTORATION CONFERENCE AND PETER WEGE TRIBUTE LUNCHEON" 
[24] "Conservation"                 
[25] "Conservation"                 
[26] "FOR GENERAL OPERATING SUPPORT" 
+1

Вот и все! Благодаря!!! – StanO

1

Два решения:

# with stringr 
library(stringr) 
a <- str_replace_all(x, "\\['|'\\]", "") %>% 
    str_split("', '") %>% 
    unlist 

# with base 
b <- unlist(strsplit(gsub("\\['|'\\]", "", x), "', '")) 

identical(a, b) 

Результат:

[1] "SPOSORSHIP FOR CONVENTION" 
[2] "GENERAL CONTRIBUTION" "GENERAL CONTRIBUTION" 
[3] "WOMEN & POPULATION" 
... 

Хитрость заключается в том, чтобы обрезать строки первой , а затем разделить на ', ' вместо просто запятой.

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

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