在列中拆分字符串并在R中添加重复的行

时间:2018-11-01 00:16:01

标签: r dataframe split

假设我有以下数据框,称为“示例”:

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,则其他列将重复。任何帮助将不胜感激!

1 个答案:

答案 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