R 追加/合并列表元素和assing ID列

R 追加/合并列表元素和assing ID列,r,list,R,List,我有几个元素的列表,这些元素的值不同。我希望将所有a合并到一列,b合并到另一列。此外,我还想分配ID为的新列(其中第一个a和第一个b获得id1,第二个a和第二个b获得id2…等等) 下面是一个列表示例: # Reproducible problem problem <- list(as.numeric(c(1:4)), as.numeric(c(25:28)), as.numeric(c(5:6)), as.numeric(c(29:30)), as.numeric(c(7:12)

我有几个元素的列表,这些元素的值不同。我希望将所有a合并到一列,b合并到另一列。此外,我还想分配ID为的新列(其中第一个a和第一个b获得id1,第二个a和第二个b获得id2…等等)

下面是一个列表示例:

    # Reproducible problem
problem <- list(as.numeric(c(1:4)), as.numeric(c(25:28)), as.numeric(c(5:6)), as.numeric(c(29:30)), as.numeric(c(7:12)), as.numeric(c(31:36)))
names(problem) <- c("a", "b", "a", "b", "a", "b")
#再现性问题

问题假设“a”、“b”交替出现并且每对的“长度”相同,则获取
长度
,使用逻辑向量的循环仅过滤第一个元素(
c(真、假)
)。将初始的
列表
转换为一个
数据框
堆栈
拆分
带有“ind”的“值”和
附加
(或
c
)使用“i1”创建的“id”
向量

i1 <- lengths(problem)[c(TRUE, FALSE)]
c(with(stack(problem), split(values, ind)), id = list(rep(paste0("id", 1:3), i1)))
#$a
#[1]  1  2  3  4  5  6  7  8  9 10 11 12

#$b
#[1] 25 26 27 28 29 30 31 32 33 34 35 36

#$id
#[1] "id1" "id1" "id1" "id1" "id2" "id2" "id3" "id3" "id3" "id3" "id3" "id3"

i1假设“a”、“b”交替出现,并且每对的“长度”相同,则获取
长度
,使用逻辑向量的循环仅过滤第一个元素(
c(真、假)
)。将初始的
列表
转换为一个
数据框
堆栈
拆分
带有“ind”的“值”和
附加
(或
c
)使用“i1”创建的“id”
向量

i1 <- lengths(problem)[c(TRUE, FALSE)]
c(with(stack(problem), split(values, ind)), id = list(rep(paste0("id", 1:3), i1)))
#$a
#[1]  1  2  3  4  5  6  7  8  9 10 11 12

#$b
#[1] 25 26 27 28 29 30 31 32 33 34 35 36

#$id
#[1] "id1" "id1" "id1" "id1" "id2" "id2" "id3" "id3" "id3" "id3" "id3" "id3"

i1使用假定a和b中长度相同的循环

result <- list(a = c(), b = c(), id = c())
i <- 1
for (j in seq(1, length(problem), 2)) {
  result[[1]] <- c(result[[1]], problem[[j]])
  result[[2]] <- c(result[[2]], problem[[j + 1]])
  result[[3]] <- c(result[[3]], rep(paste0('id', i), length(problem[[j]])))
  i <- i + 1                 
}

结果使用假设a和b中长度相同的循环

result <- list(a = c(), b = c(), id = c())
i <- 1
for (j in seq(1, length(problem), 2)) {
  result[[1]] <- c(result[[1]], problem[[j]])
  result[[2]] <- c(result[[2]], problem[[j + 1]])
  result[[3]] <- c(result[[3]], rep(paste0('id', i), length(problem[[j]])))
  i <- i + 1                 
}
结果