假设我有以下数据框,称为“示例”:
a <- c("rs123|rs246|rs689653", "rs9753", "rs00334")
b <- c(1,2,9)
c <- c(234534523, 67345634, 536423)
example <- data.frame(a,b,c)
我希望数据框看起来像这样:
a b c
rs123 1 234534523
rs246 1 234534523
rs689653 1 234534523
rs9753 2 67345634
rs00334 9 536423
如果我们在|
分隔符上拆分列a,则其他列将重复。任何帮助将不胜感激!
答案 0 :(得分:2)
我们可以使用separate_rows
包(属于tidyr
包的一部分)中的tidyverse
。
library(tidyverse)
example2 <- example %>%
separate_rows(a)
example2
# a b c
# 1 rs123 1 234534523
# 2 rs246 1 234534523
# 3 rs689653 1 234534523
# 4 rs9753 2 67345634
# 5 rs00334 9 536423
这是将example2
转换回原始格式的一种方法。
example3 <- example2 %>%
group_by(b, c) %>%
summarize(a = str_c(a, collapse = "|")) %>%
ungroup() %>%
select(names(example2)) %>%
mutate(a = factor(a)) %>%
as.data.frame()
identical(example, example3)
# [1] TRUE