我有四个不同长度/变化长度的向量,例如A,B,C,D。我想要建立一个主向量,它是由and中的向量的顶部行组成,然后是and的第二高行。
c(A1,1,B1,C1,D1,A1,A2,1,B2,1 ...and等)
我有这样的想法,把A,B,C,D,然后转到每一行,但是由于and的长度不同,这是不可能的。
注意:虽然A的大小不同,但随着时间的推移,随着数据的增加,它们会增长.
发布于 2016-08-18 04:04:07
我找到了我的解决方案。使用以下引用的cbind.fill代码:cbind a df with an empty df (cbind.fill?)
cbind.fill <- function(...){
nm <- list(...)
nm <- lapply(nm, as.matrix)
n <- max(sapply(nm, nrow))
do.call(cbind, lapply(nm, function (x)
rbind(x, matrix(, n-nrow(x), ncol(x)))))
}
然后,使用以下方法将其转换为主向量,该向量接受A的顶部行:
X<-matrix(t(X),ncol=1)
发布于 2016-08-18 01:58:31
我们将vectors
放置在一个list
中,然后通过将length
(length<-
)赋值给lengths
的max
'lst',将length
(length<-
)分配给lengths
的max
,从而使list
的长度保持不变,然后将MARGIN=1
的apply
转换为data.frame
,然后将每一行的元素sort
和unlist
指定为data.frame
。
d1 <- data.frame(lapply(lst, `length<-`, max(lengths(lst))))
unlist(apply(d1, 1, FUN = function(x) sort(x)))
数据
lst <- list(A = c(1, 5, 7, 5), B = c(3, 4, 6, 2, 5), C = c(5, 3, 2),
D = c(8, 1, 3, 5, 6))
发布于 2016-08-18 02:22:16
首先,您应该将松散变量组装到一个列表中,以便于在不重复代码的情况下对它们进行自动化处理。然后,我们可以有效地迭代最长向量的索引范围,并在所有输入向量中索引驻留在该索引处的元素。原子向量的超限索引自然会返回NA,满足了短向量的需要。此外,由于您只关心每个输入矩阵的第一列,所以只在初始组装步骤中组装这些列会有所帮助。
lst <- lapply(mget(LETTERS[1:4]),`[`,,1L);
lst;
## $A
## [1] 37 56
##
## $B
## [1] 94 65 61 5 19
##
## $C
## [1] 99 37 76 90
##
## $D
## [1] 1 37
##
c(sapply(seq_len(max(lengths(lst))),function(i) sapply(lst,`[`,i)));
## [1] 37 94 99 1 56 65 37 37 NA 61 76 NA NA 5 90 NA NA 19 NA NA
数据
set.seed(1L);
for (n in LETTERS[1:4]) assign(n,matrix(sample(0:99,sample(1:5,1L)*2L),ncol=2L));
https://stackoverflow.com/questions/39015077
复制