R:数据框中行的总和

R: summation of rows in a data frame

我想做什么:我有一个数据框,其中第一列由字符串组成,其余列由数值填充。我想将前三行添加到其余三行中,同时对行应用不同的因素,例如:row1*x + row4*y, row1*x + row5*y, row1*x + row6* y,然后是 row2*x+row4*y,依此类推直到 row3*x+row6*y。然后我想再次做同样的事情,但 x 和 y 的值不同,然后第三次 x 和 y 的值不同。然后我想对第 1-3 行和第 7-9 行执行相同的操作,然后对第 1-3 行和第 10-12 行执行相同的操作。确切的顺序很重要。我想将所有这些写成新数据框中的行。

我还想合并第一列的各个字符串,添加一个标记以便我知道我做了哪个求和,然后每组连续计数器。我想将它添加到我的结果数据框中,这样我就可以看到哪一行来自哪里。

我所拥有的:在大量使用 for 循环之后,这段代码最终完全符合我的要求,但它很丑陋,而且对于我的实际数据(实际数据框有 1762 列)来说它真的很慢。

numbers <- data.frame(replicate(10,sample(1:100,12,rep=TRUE))) 
id <- data.frame(id=c("d1","d2","d3","v11","v12","v13","v21","v22","v23","v31","v32","v33"))
data <- cbind(id,numbers)

results <- data.frame() 
data.raw <- data[,-1] 
legend <- data.frame()
q=1 
#################### rows 1-3 with rows 4-6
k=1 # my continuous counter
for(i in 1:3) {
    for(j in 4:6){
        results <- rbind(results,0.99*(data.raw[i,])+0.01*(data.raw[j,]))
        legend[q,1] <- paste(data[i,1],data[j,1],"01",k,sep="_")
        q=q+1
        k=k+1 }}
k=1
for(i in 1:3){
    for(j in 4:6){  
        results <- rbind(results,0.95*(data.raw[i,])+0.05*(data.raw[j,]))
        legend[q,1] <- paste(data[i,1],data[j,1],"05",k,sep="_")
    q=q+1
    k=k+1 }}
k=1
for(i in (1:3)){
    for(j in 4:6){  
        results <- rbind(results,0.9*(data.raw[i,])+0.1*(data.raw[j,]))
        legend[q,1] <- paste(data[i,1],data[j,1],"10",k,sep="_")
        q=q+1 
        k=k+1   }}
#################### rows 1-3 with rows 7-9
k=1
for(i in 1:3){
    for(j in 7:9){
        results <- rbind(results,0.99*(data.raw[i,])+0.01*(data.raw[j,]))
        legend[q,1] <- paste(data[i,1],data[j,1],"01",k,sep="_")
        q=q+1
        k=k+1 }}
k=1
for(i in 1:3){
    for(j in 7:9){  
        results <- rbind(results,0.95*(data.raw[i,])+0.05*(data.raw[j,]))
        legend[q,1] <- paste(data[i,1],data[j,1],"05",k,sep="_")
        q=q+1
        k=k+1 }}
k=1
for(i in 1:3){
    for(j in 7:9){  
        results <- rbind(results,0.9*(data.raw[i,])+0.1*(data.raw[j,]))
        legend[q,1] <- paste(data[i,1],data[j,1],"10",k,sep="_")
        q=q+1 
        k=k+1   }}
#################### rows 1-3 with rows 10-12
k=1
for(i in 1:3){
    for(j in 10:12){
        results <- rbind(results,0.99*(data.raw[i,])+0.01*(data.raw[j,]))
        legend[q,1] <- paste(data[i,1],data[j,1],"01",k,sep="_")
        q=q+1
        k=k+1 }}
k=1
for(i in 1:3){
    for(j in 10:12){    
        results <- rbind(results,0.95*(data.raw[i,])+0.05*(data.raw[j,]))
        legend[q,1] <- paste(data[i,1],data[j,1],"05",k,sep="_")
        q=q+1
        k=k+1 }}
k=1
for(i in 1:3){
    for(j in 10:12){    
        results <- rbind(results,0.9*(data.raw[i,])+0.1*(data.raw[j,]))
        legend[q,1] <- paste(data[i,1],data[j,1],"10",k,sep="_")
        q=q+1 
        k=k+1   }}

mydataframe <- cbind(legend,results)

我想要的:更漂亮、更短、更快的东西。显然可以用函数替换 for 循环,但这就是我迷路的地方。我想我可以使用 apply 系列中的一些东西,但我还没有完全理解函数的概念,然后随着描述性字符串的出现,一切都变得更加复杂。

有人能给我指出正确的方向吗?

第一步,不要使用数据框,而是将它们转换为矩阵。简单地改变

results <- data.frame() 
data.raw <- data[,-1] 

results<-c()
data.raw <- as.matrix(data[,-1] )

在顶部应该会加快很多速度。