我有三个使用Matrix包构建的dgCMatrix稀疏矩阵。 这两个矩阵的行的顺序不一样,所以我想用rownames对它们进行重新排序,以便我可以将三个矩阵一起添加。 有人会提示快速做到这一点吗?
非常感谢,
尼古拉斯
这是一个小例子,其中ZZ是错误的,因为矩阵的顺序不同:
@Bean
public IntegrationFlow fileReadingFlow() {
return IntegrationFlows
.from(fileMessageSource(),
new Consumer<SourcePollingChannelAdapterSpec>() {
@Override
public void accept(SourcePollingChannelAdapterSpec e) {
e.autoStartup(true).poller(Pollers.fixedRate(6000)
.maxMessagesPerPoll(1));
}
}).transform(Transformers.fileToByteArray())
.channel(MessageChannels.queue("fileReadingResultChannel"))
.get();
}
@Bean
public MessageSource<File> fileMessageSource() {
FileReadingMessageSource source = new FileReadingMessageSource();
source.setDirectory(new File(localDir));
source.setAutoCreateDirectory(true);
return source;
}
答案 0 :(得分:1)
我在网站上找到了这个解决方案:
new_df <- df[ order(row.names(df)), ]
链接:How can I use the row.names attribute to order the rows of my dataframe in R?
答案 1 :(得分:0)
为了更清晰,我添加了一个虚拟示例。 感谢您的回答Mikkel,它实际上使用:
Z1 <- Matrix:::fac2sparse(dat$fac1, "d",drop=F)
Z1 <- Z1[order(row.names(Z1)),]
Z2 <- Matrix:::fac2sparse(dat$fac2, "d",drop=F)
Z2 <- Z2[order(row.names(Z2)),]
Z3 <- Matrix:::fac2sparse(dat$fac3, "d",drop=F)
Z3 <- Z3[order(row.names(Z3)),]
ZZ <- Z1+Z2+Z3
我发现另一种解决方案是在使用lapply之前对因子的级别进行排序:
dat$fac1 <- factor(dat$fac1,levels=sort(levels(dat$fac1))
dat$fac2 <- factor(dat$fac2,levels=sort(levels(dat$fac2))
dat$fac3 <- factor(dat$fac3,levels=sort(levels(dat$fac3))
Zl <- lapply(c("fac1","fac2","fac3"),function(nm) Matrix:::fac2sparse(dat[[nm]],"d",drop=F))
ZZ <- Reduce("+", Zl[-1], Zl[[1]])