我有一个相当奇怪的问题。 设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,我希望条目“更旧”,表明这种情况。