R中的填充序列

R中的填充序列,r,R,我想根据列中元素的最大数量高效地创建左填充列 让我详细介绍一下输入和输出 我的输入数据如下: input <- data.frame(path=c("2","4,3,4","3,1")) input path 1 2 2 4,3,4 3 3,1 基于输入的逻辑为: 1-我们看一下这个例子中最大元素的行,它是3,因为第2行中有4,3,4,我们现在知道我们需要创建3列作为输出 2-对于没有3个元素的行,我们使用0进行回填。 因为第一行只有1个元素,所以我需要用0放置两列 对

我想根据列中元素的最大数量高效地创建左填充列

让我详细介绍一下输入和输出 我的输入数据如下:

input <- data.frame(path=c("2","4,3,4","3,1"))
input
   path
1     2
2 4,3,4
3   3,1
基于输入的逻辑为:

1-我们看一下这个例子中最大元素的行,它是3,因为第2行中有4,3,4,我们现在知道我们需要创建3列作为输出

2-对于没有3个元素的行,我们使用0进行回填。 因为第一行只有1个元素,所以我需要用0放置两列 对于第二行,我可以直接填充所有列,因为我们有三个元素,对于最后一行,我有两个元素,所以我需要回填一个0

我的尝试虽然有效果,但很肮脏

input$path <- as.character(input$path)
lst <- strsplit(input$path, ",")
column_to_create <- max(lengths(lst))
output <- list()
i <- 1
for(i in 1:length(lst)){
  if (length(lst[[i]]) < column_to_create) {

    nb_create <- column_to_create - length(lst[[i]])
    output[[i]] <- c(rep(0,nb_create),lst[[i]])
  }
  else{
    output[[i]] <- lst[[i]]
  }

}
output <- lapply(output,as.numeric)
do.call(rbind,output)

     [,1] [,2] [,3]
[1,]    0    0    2
[2,]    4    3    4
[3,]    0    3    1
这是一个整洁的解决方案

分开,分成三列,如果没有足够的碎片,则向左填充,将NA替换为0

输出 -------------------------------------------- 未知列数的泛化 迭代每一行,在strsplit之后确定向量的长度,并将最大值保存为num.cols。粘贴新列名

num.cols <- max(sapply(1:nrow(input), function(x) length(unlist(strsplit(as.character(input$path[x]), ",")))))
new.cols <- paste0("V", 1:num.cols)
input %>%
  separate(path, into=new.cols, ",", fill="left") %>%
  replace(is.na(.), 0)
  V1 V2 V3
1  0  0  2
2  4  3  4
3  0  3  1
num.cols <- max(sapply(1:nrow(input), function(x) length(unlist(strsplit(as.character(input$path[x]), ",")))))
new.cols <- paste0("V", 1:num.cols)
input %>%
  separate(path, into=new.cols, ",", fill="left") %>%
  replace(is.na(.), 0)