2015-10-16 3 views
1

В настоящее время я работаю над проектом в R, и у меня есть столбец, который получает вывод из модели kmeans, которая выбирает кластер режимов, к которому принадлежит определенный магазин. К сожалению, существует связь, поэтому один из экземпляров в столбце присваивается двум кластерам. См. Пример вывода ниже. Столбцы - это rownumber, Store и Cluster соответственно.Разделение столбца, содержащего double в R

row store cluster 
759 759  3 
760 760  3 
761 761  3 
762 762  1, 3 
763 763  3 
764 764  1 

Мне нужно вырвать 1 из 3 и просто сохранить один в столбце.

ответ

0

Вы можете просто сделать что-то вроде этого:

my_data <- dplyr::data_frame("row" = 759:764, "store" = 759:764, "cluster" = c("3", "3", "3", "1, 3", "3", "1")) 
my_data 
Source: local data frame [6 x 3] 

    row store cluster 
1 759 759  3 
2 760 760  3 
3 761 761  3 
4 762 762 1, 3 
5 763 763  3 
6 764 764  1 
my_data$cluster <- my_data$cluster %>% stringr::str_extract("[^,]") 
my_data 
Source: local data frame [6 x 3] 

    row store cluster 
1 759 759  3 
2 760 760  3 
3 761 761  3 
4 762 762  1 
5 763 763  3 
6 764 764  1 

строка кода, который устанавливает my_data$cluster говорит R, чтобы извлечь все из строки, которая не является запятая; как только он попадает в запятую, он останавливается. Поскольку мы используем stringr::str_extract вместо stringr::str_extract_all, он возвращает только первое значение.

0

Если столбец «кластер» содержит строковый элемент, мы можем сделать это, используя sub от base R. Мы сопоставляем запятую, сопровождаемую одним или несколькими символами, до конца строки и заменяем ее ''.

df1$cluster <- sub(',.*$', '', df1$cluster) 

Если столбец является list, мы используем sapply извлечь первый элемент

df1$cluster <- sapply(df1$cluster, `[`,1) 
Смежные вопросы