如何基于分号分隔字符串

时间:2017-04-20 21:58:32

标签: r

我有数据

india1;india-2;india3
coreanorth1;corea
gdyijq;udyhfs
gdyijq;udyhfs;gqdtr
USA;America1

dput可以在这里找到

df <- structure(list(india1.india.2.india3 = structure(1:4, .Label = c("coreanorth1;corea", 
"gdyijq;udyhfs", "gdyijq;udyhfs;gqdtr", "USA;America1"), class = "factor")), .Names = "india1.india.2.india3", class = "data.frame", row.names = c(NA, 
-4L))

我要做的是将它们分开并将它们放在彼此之下

india1        1
india-2       1
india3        1
coreanorth1   2
corea         2
 gdyijq       3
udyhfs        3
 gdyijq       3
udyhfs        4
gqdtr         4
USA           5
America1      5 

2 个答案:

答案 0 :(得分:1)

买一个!这有效:

library(dplyr)

df <- data.frame(
  string = c("india1;india-2;india3",
  "coreanorth1;corea",
  "gdyijq;udyhfs",
  "gdyijq;udyhfs;gqdtr",
  "USA;America1"))

df %>% 
  mutate(string = as.character(string),
         row = 1:n(),
         string = strsplit(string, ";")) %>% 
  unnest(string) 

给了我:

   row      string
1    1      india1
2    1     india-2
3    1      india3
4    2 coreanorth1
5    2       corea
6    3      gdyijq
7    3      udyhfs
8    4      gdyijq
9    4      udyhfs
10   4       gqdtr
11   5         USA
12   5    America1

答案 1 :(得分:1)

修改:根据@thelatemail的评论更改sapply以获得lengths的长度。 准确使用您提供解决方案的输入数据:

spl <- str_split(df[,1], ";");
res <- data.frame(split = unlist(spl), 
                  count = rep(1:length(spl), times = lengths(spl)))
   #         split count
   # 1 coreanorth1     1
   # 2       corea     1
   # 3      gdyijq     2
   # 4      udyhfs     2
   # 5      gdyijq     3
   # 6      udyhfs     3
   # 7       gqdtr     3
   # 8         USA     4
   # 9    America1     4

请注意,您的输入数据有“india ...”字符作为列的名称,这就是为什么它没有被添加。