我目前正在研究R中的一个项目,我有一个列接收来自kmeans模型的输出,该模型选择特定商店所属的模式集群。不幸的是,存在一个平局,因此列中的一个实例被分配给两个集群。见下面的示例输出。列分别是rownumber,Store和Cluster。
row store cluster
759 759 3
760 760 3
761 761 3
762 762 1, 3
763 763 3
764 764 1
我需要从3中删除1,并将其保留在列中。
答案 0 :(得分: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
,因此它只返回第一个值。
答案 1 :(得分:0)
如果列&#39;群集&#39;包含字符串元素,我们可以使用sub
中的base R
来执行此操作。我们匹配逗号后跟一个或多个字符,直到字符串结尾,并将其替换为''
。
df1$cluster <- sub(',.*$', '', df1$cluster)
如果列是list
,我们使用sapply
来提取第一个元素
df1$cluster <- sapply(df1$cluster, `[`,1)