R 追加/合并列表元素和assing ID列
我有几个元素的列表,这些元素的值不同。我希望将所有a合并到一列,b合并到另一列。此外,我还想分配ID为的新列(其中第一个a和第一个b获得id1,第二个a和第二个b获得id2…等等) 下面是一个列表示例: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)
# 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
}
结果