使用R/tidyverse以未定义的列数分隔数据帧的一列

使用R/tidyverse以未定义的列数分隔数据帧的一列,r,tidyverse,tidyr,data-import,R,Tidyverse,Tidyr,Data Import,我必须导入一个如下数据框所示的表: > df = data.frame(x = c("a", "a.b","a.b.c","a.b.d", "a.d")) > df x 1 <NA> 2 a 3 a.b 4 a.b.c 5 a.b.d 6 a.d 我想根据我将找到的分隔符的数量将第一列分隔成一列或多列 输出应该是这样的 > df_separated col1 col2 col3 1 a <NA> <NA&g

我必须导入一个如下数据框所示的表:

> df = data.frame(x = c("a", "a.b","a.b.c","a.b.d", "a.d"))
> df
      x
1  <NA>
2     a
3   a.b
4 a.b.c
5 a.b.d
6   a.d
我想根据我将找到的分隔符的数量将第一列分隔成一列或多列

输出应该是这样的

> df_separated
  col1 col2 col3
1    a <NA> <NA>
2    a    b <NA>
3    a    b    c
4    a    b    d
5    a    d <NA>
我试图在tidyr中使用单独的函数,但我需要事先指定需要多少outoput列


非常感谢您的帮助

您可以先计算它可以占用的列数,然后单独使用


您可以先计算它可以占用的列数,然后使用单独的列

librarydata.table;DT librarydata.table;DT
nmax <- max(stringr::str_count(df$x, "\\.")) + 1
tidyr::separate(df, x, paste0("col", seq_len(nmax)), sep = "\\.", fill = "right")

#  col1 col2 col3
#1    a <NA> <NA>
#2    a    b <NA>
#3    a    b    c
#4    a    b    d
#5    a    d <NA>