拆分包含R中的double的列

时间:2015-10-16 02:36:48

标签: r

我目前正在研究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,并将其保留在列中。

2 个答案:

答案 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)
相关问题