从R data.frame中的其他列中减去列

时间:2013-08-09 06:31:37

标签: r

我有一个相当奇怪的问题。 设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&lt; -i + 1位完全错误,因为我忘了,在for循环结束时,无论如何我都会增加。 好的,一个简短的例子

 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,保存差异为我从第三列的价值。 你有一些vectorize包的例子吗?因为我无法真正掌握帮助中的内容。 再次感谢! :)

预期结果:

 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,我希望条目“更旧”,表明这种情况。

0 个答案:

没有答案