将包含不同大小的整数列表的列表转换为R中的数据帧,而不使用任何N/a值
我有这样的想法:将包含不同大小的整数列表的列表转换为R中的数据帧,而不使用任何N/a值,r,R,我有这样的想法: x1 <- list(1,2,3,4,5) x2 <- list(1,4,7,8) x3 <- list(5,6) x4 <- list(9,0,0,5,6,7) myList <- list(x1, x2, x3, x4) df <- data.frame(matrix(unlist(myList), nrow=length(myList), byrow = T)) X1 X2 X3 X4 X5 X6 1 2 3 4 5 5
x1 <- list(1,2,3,4,5)
x2 <- list(1,4,7,8)
x3 <- list(5,6)
x4 <- list(9,0,0,5,6,7)
myList <- list(x1, x2, x3, x4)
df <- data.frame(matrix(unlist(myList), nrow=length(myList), byrow = T))
X1 X2 X3 X4 X5 X6
1 2 3 4 5 5
1 4 7 8 8 8
5 6 6 6 6 6
9 0 0 5 6 7
我的方法是在执行代码之前完成列表: 首先我计算最大长度
max_len = max(sapply(myList, length))
然后我用重复的最后一个元素来完成每个列表
myList <- lapply(myList, function(x)c(x, rep(x[length(x)], max_len - length(x) )))
myList位于底端R
myList V1 V2 V4 V5 V6
#> 1 1 2 3 4 5 5
#> 2 1 4 7 8 8 8
#> 3 5 6 6 6 6 6
#> 4 9 0 0 5 6 7
还是咕噜
库(purrr)
myList%>%
映射(~c(.x,rep(tail(.x,1),max(length(myList))-length(.x)))%>%
映射(设置名称(.x,粘贴0('V',顺(.x)))
#>#tibble:4 x 6
#>V1 V2 V3 V4 V5 V6
#>
#> 1 1.00 2.00 3.00 4.00 5.00 5.00
#> 2 1.00 4.00 7.00 8.00 8.00 8.00
#> 3 5.00 6.00 6.00 6.00 6.00 6.00
#> 4 9.00 0 0 5.00 6.00 7.00
myList <- lapply(myList, function(x)c(x, rep(x[length(x)], max_len - length(x) )))
df <- data.frame(matrix(unlist(myList), nrow=length(myList), byrow = T))