我有数据
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
答案 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 ...”字符作为列的名称,这就是为什么它没有被添加。