我被这个问题困扰了。请注意,我已经编辑了原始问题,因为我忘记提供解决此问题的关键细节。
对于这个错误,我向第一个回答这个问题的人致以诚挚的歉意!
下面提供了 MWE
mydf.1 <- data.frame(age=factor(c(0:4,6:10),levels=c(0:4,6:10),ordered=TRUE), Freq=c(1,2,3,7,8,9,10,5,10,10))
mydf.2 <- data.frame(age=factor(6:10,levels=c(6:10),ordered=TRUE),Freq=c(10,5,10,10,21))
mydf.3 <- data.frame(age=factor(0:3,levels=c(0:3),ordered=TRUE),Freq=c(1,5,9,4))
mydf.list <- list(mydf.1,mydf.2,mydf.3)
mydf.list
#desired output
myout.1 <- data.frame(age=factor(0:10,levels=c(0:10),ordered=TRUE), Freq=c(1,2,3,7,8,0,9,10,5,10,10))
myout.2 <- data.frame(age=factor(0:10,levels=c(0:10),ordered=TRUE),Freq=c(0,0,0,0,0,0,10,5,10,10,21))
myout.3 <- data.frame(age=factor(0:10,levels=c(0:10),ordered=TRUE),Freq=c(1,5,9,4,0,0,0,0,0,0,0))
myout.list <- list(myout.1,myout.2,myout.3)
myout.list
#My best unsuccessful attempt
mydf.empty <- data.frame(age=factor(0:10,levels=c(0:10),ordered=TRUE),Freq=c(rep(0,11)))
myrows <- list()
for (i in c(1:3)){
myrows[[i]] <- rownames(mydf.empty)[rownames(mydf.empty) %in% rownames(mydf.list[[i]])]
}
myrows
任何帮助将不胜感激。谢谢!
史蒂夫
我们假设问题是输入一个单列矩阵列表并输出它,在末尾用零填充到最长的长度。 昏暗的名字应该被删除。
我们计算长度
lens
和模板template
。 然后我们更新
对每个输入列表元素使用 replace
的模板。
lens <- lengths(mymatrix.list)
template <- matrix(0, max(lens), 1)
Replace <- function(m, len) replace(template, seq_along(m), m)
out <- Map(Replace, mymatrix.list, lens)
identical(out, myoutput.list)
## [1] TRUE
如果列数不一定是 1,则使用这个更通用的公式:
dims <- lapply(mymatrix.list, dim)
template <- array(0, Reduce(pmax, dims))
Replace <- function(m) {
template[seq_len(nrow(m)), seq_len(ncol(m))] <- m
template
}
out <- Map(Replace, mymatrix.list)
identical(out, myoutput.list)
## [1] TRUE
mymatrix.list <- list(
matrix(c(1, 2, 3), 3, dimnames = list(c("1", "2", "3"), NULL)),
matrix(seq(4, 7, by = 1), 4, dimnames = list(c("4", "5", "6", "7"), NULL)),
matrix(seq(7, 11, by = 1), 5, dimnames = list(c("7", "8", "9", "10", "11"), NULL))
)
myoutput.list <- list(
matrix(c(1, 2, 3, 0, 0), 5),
matrix(c(4, 5, 6, 7, 0), 5),
matrix(seq(7, 11, by = 1), 5)
)