2017-02-20 19 views
0

У меня есть таблица выглядит следующим образом:Преобразование запятыми список для фиктивных переменных

yel <- data.table(id=c(1,2,3)) 
yel$names[1] <- "\"parking space\", \"dining\", \"3bh\"" 
yel$names[2] <- "\"parking\" , \"outdoor\"" 
yel$names[3] <- "\"Hello!\",\"dining room\",\"3bh\"" 
yel 

    id       names 
1: 1 "parking space", "dining", "3bh" 
2: 2   "parking" , "outdoor" 
3: 3  "Hello!","dining room","3bh" 

Я был dummify в имена переменных и присоединиться те же слова, как места для парковки с парковкой, а также столовая с столовой.

Я хочу, чтобы фиктивные переменные были следующими: парковка, столовая, 3bh, наружная, привет. Есть ли способ, который это делает?

+0

Наименее хорошо определенный бит, кажется, * «присоединиться одни и те же слова, как места для парковки с парковкой, а также столовая комната с кухонным» * - с '' parkingspace' и diningroom' в качестве результатов. Можете ли вы сформулировать правила более точно? Можем ли мы обобщить, что если есть фраза из 2 слов, любая запись, соответствующая первому слову, должна также получить второе слово, а затем пространство должно быть удалено? Есть ли случаи, когда второе слово отличается? Что произойдет, если будут и «парковочное место» и «парковка»? – Gregor

+0

@ Грегор очень жаль, что не ясна. Я хотел бы перефразировать его «присоединить похожие слова, такие как« парковочное место »и« автостоянка »к« парковке ». Помогло бы это? –

+2

Если данные такие простые, то вы можете просто удалить все после первого слова. что-то вроде 'library (splitstackshape), dcast (cSplit (yel," names ",", "," long ") [, names: = gsub ('\\" |. *', "", names)], id ~ names, fun.aggregate = length) '? – A5C1D2H2I1M1N2O1R2T1

ответ

0

Как насчет этого (регулярное выражение может по-прежнему нуждаться в настройке немного - не похоже, что оно достаточно обобщено). Использование tidyr:

separate_rows(yel,names,sep=",")->df1 
df1 %>% mutate(newnames=gsub('\\"| space|\\!| |room', "", names)) 

    id   names newnames 
1 1 "parking space" parking 
2 1  "dining" dining 
3 1   "3bh"  3bh 
4 2  "parking" parking 
5 2  "outdoor" outdoor 
6 3  "Hello!" Hello 
7 3 "dining room" dining 
8 3   "3bh"  3bh 
+0

Большое спасибо –

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