假设我有两个矩阵,一个是大小为1的rownames:n,另一个是大小< n和1和n之间的一些rownames。
set.seed(123)
x <- runif(100, 0.0, 1.0)
names(x) <- 1:100
x <- as.matrix(x)
y <- runif(10,0.0,1.0)
names(y) <- c(1,16,17,30,40,57,64,90,91,110)
y <- as.matrix(y)
我希望将x乘以y元素,使得对于具有索引i的每行x,将其与具有索引j的y最大y值相乘,使得i <= j。例如x(1) - > y(1)* y(1),x(2) - > x(2)* y(16),x(3) - > x(3)* y( 16)。我可以在一个循环中执行此操作,但如果x将成为数百万行,是否有一些方法可以利用R中的向量操作。我也厌倦了后退(locb)y,因为它会产生另一个大矩阵。
答案 0 :(得分:1)
您可以使用sapply
:
## First convert the rownames of y into numeric
yrows=as.numeric(rownames(y));
## For each row i of x, multiply x[i] by the element of y that has the smallest row index >=i
res=sapply(1:nrow(x),function(i) {x[i]*y[min(which(yrows>=i))]})
返回与x
相同长度的向量。