【发布时间】:2011-09-28 10:51:19
【问题描述】:
我发了a question yesterday,得到了专家们的精彩回应。但是,我现在面临另一个问题,因为我的起始文件(df1)太大,我发现无法在我的真实数据中完成这些工作。我想知道是否有更快的方法可以在不使用 adply 或 for 循环的情况下完成相同的工作?
我原来的问题如下:
第 1 步:我有一个这样的简化数据框:
df1 = data.frame (B=c(1,0,1), C=c(1,1,0)
, D=c(1,0,1), E=c(1,1,0), F=c(0,0,1)
, G=c(0,1,0), H=c(0,0,1), I=c(0,1,0))
B C D E F G H I
1 1 1 1 1 0 0 0 0
2 0 1 0 1 0 1 0 1
3 1 0 1 0 1 0 1 0
第 2 步:我想做逐行减法,即 (row1 - row2)、(row1 - row3) 和 (row2 - row3)
row1-row2 1 0 1 0 0 -1 0 -1
row1-row3 0 1 0 1 -1 0 -1 0
row2-row3 -1 1 -1 1 -1 1 -1 1
第 3 步:将所有 -1 替换为 0
row1-row2 1 0 1 0 0 0 0 0
row1-row3 0 1 0 1 0 0 0 0
row2-row3 0 1 0 1 0 1 0 1
您能不能教我如何以较少占用内存的方式做到这一点?
【问题讨论】:
-
另外,您的数据是否总是二进制的,即 0 和 1?
-
这个(以及相关的 Q)与您几周前提出的目标是乘法而不是减法的 Q 有何不同? stackoverflow.com/questions/7297505/…
-
如果您使用内存映射文件,通过像
bigmemory这样的包,您可以使用非常少的 RAM 并拥有非常大的数据集 - 您可以在 HD 空间中容纳的所有内容。 -
我在@Andrie 之后重复:你的data.frame 中有多少行和多少列?简单的
dim(df1)输出。