2

我有一个相当奇怪的问题。假设 X 是一个包含大约 300.000 行和 300 列的数据集。假设 X 中的许多条目都有缺失值(在这种情况下实际上等于零)。我想要做的:从最右边的列中减去每一行的第三列,这并没有丢失。保存差异,以及 colname。如果差值不是负数,则在行中搜索下一个未缺失值,向左移动,然后计算已计算的差值与新的未缺失值之间的差值。只要差异不是负数并且每次都保存colname,就这样做。

我已经写了一些东西,为我做这个 - 问题是,它实际上需要大约 53 小时才能完成,我认为数据集甚至不是特别大。你们能帮帮我吗:(

b <- c()
length(b) <- 193145
d <- 0;
for (i in (1:193145))
{
  d <- 0;
  for (j in (271:4))
  {
      while(is.na(x[i,j]))
      {
        j <- j-1;
      }
      d <- (d+x[i,j]);
      if ((x[i,3]-d)&&(j>3))
      {
        b[i] <- colnames(x)[j]
        j <- 2
      }
      else if (j==3)
      {
        b[i] <- "older"
      }
      j<-j-1;

  }
  i<-i+1;
}

更新:大家好,感谢您的快速回复。i<-i+1 位是完全错误的,因为我忘记了,在 for 循环结束时,无论如何 i 都会增加。好的,一个简短的例子

 A B C D E F G H I 
 AB001BWIF085 SS13 2980 NA NA 4000 NA NA 3000  
 AB001BWCE475 SS12 3800 NA NA 5000 NA NA 2000
 AB001BWIF087 SS13 2980 NA NA 2000 NA NA  500

我想做什么?我想遍历每一行,并从以下列中的每个值中减去第三列中的值,从最右边开始。我希望将对象的 COLNAME(不是 NA)保存为我的值来自第三列。你有一些矢量化包的例子吗?因为我无法真正掌握帮助中提供的内容。再次感谢!:)

预期结果:

 A col_name_1 difference_1 col_name_2 difference_2 ...
 AB001BWIF085 I -20 NA NA
 AB001BWCE475 I 1200 F -3800 
 AB001BWIF087 I 2480 F 480 "older" 

如果差异不会低于 0,我希望条目“较旧”,表示这种情况。

4

0 回答 0