如何在维护 R 中的其他列的同时将字符串拆分为新行
How to split strings into new rows while maintaining other columns in R
我想将字符向量列拆分为多行(同一数据帧),同时在这个可重现的示例中维护其他列(keep
):
dat<-structure(list(ID = c("E87", "E42", "E39", "E16,E17,E18", "E760,E761,E762"), keep = 1:5), row.names = c(NA, 5L), class = "data.frame")
> dat
ID keep
1 E87 1
2 E42 2
3 E39 3
4 E16,E17,E18 4
5 E760,E761,E762 5
当然我们可以将 ID
与 strsplit
分开,但输出是列表格式(出于某种原因这总是让我感到困惑),并且没有列 keep
strsplit(dat$ID, ",")
[[1]]
[1] "E87"
[[2]]
[1] "E42"
[[3]]
[1] "E39"
[[4]]
[1] "E16" " E17" " E18"
[[5]]
[1] "E760" "E761" "E762"
使用 unlist
我可以将此输出返回到向量中,但现在顺序肯定会丢失,以便能够将 keep
与 ID
重新组合。
unlist(strsplit(dat$ID, ","))
[1] "E87" "E42" "E39" "E16" " E17" " E18" "E760" "E761" "E762"
关于如何获得此输出的任何想法:
> dat
ID keep
1 E87 1
2 E42 2
3 E39 3
4 E16 4
5 E17 4
6 E18 4
7 E760 5
8 E761 5
9 E762 5
更简单的选择是 separate_rows
library(tidyr)
separate_rows(dat, ID)
# ID keep
#1 E87 1
#2 E42 2
#3 E39 3
#4 E16 4
#5 E17 4
#6 E18 4
#7 E760 5
#8 E761 5
#9 E762 5
或者使用OP的方法,拆分'ID'后,用'keep'列命名,然后stack
为两列data.frame
stack(setNames(strsplit(dat$ID, ","), dat$keep))
我想将字符向量列拆分为多行(同一数据帧),同时在这个可重现的示例中维护其他列(keep
):
dat<-structure(list(ID = c("E87", "E42", "E39", "E16,E17,E18", "E760,E761,E762"), keep = 1:5), row.names = c(NA, 5L), class = "data.frame")
> dat
ID keep
1 E87 1
2 E42 2
3 E39 3
4 E16,E17,E18 4
5 E760,E761,E762 5
当然我们可以将 ID
与 strsplit
分开,但输出是列表格式(出于某种原因这总是让我感到困惑),并且没有列 keep
strsplit(dat$ID, ",")
[[1]]
[1] "E87"
[[2]]
[1] "E42"
[[3]]
[1] "E39"
[[4]]
[1] "E16" " E17" " E18"
[[5]]
[1] "E760" "E761" "E762"
使用 unlist
我可以将此输出返回到向量中,但现在顺序肯定会丢失,以便能够将 keep
与 ID
重新组合。
unlist(strsplit(dat$ID, ","))
[1] "E87" "E42" "E39" "E16" " E17" " E18" "E760" "E761" "E762"
关于如何获得此输出的任何想法:
> dat
ID keep
1 E87 1
2 E42 2
3 E39 3
4 E16 4
5 E17 4
6 E18 4
7 E760 5
8 E761 5
9 E762 5
更简单的选择是 separate_rows
library(tidyr)
separate_rows(dat, ID)
# ID keep
#1 E87 1
#2 E42 2
#3 E39 3
#4 E16 4
#5 E17 4
#6 E18 4
#7 E760 5
#8 E761 5
#9 E762 5
或者使用OP的方法,拆分'ID'后,用'keep'列命名,然后stack
为两列data.frame
stack(setNames(strsplit(dat$ID, ","), dat$keep))