2014-01-14 81 views
1

我有一個數據框,包含2177個觀察值和44個值。其中一行特別感興趣,因爲我想自己減去這些行的值,因此該行將爲零。與此同時,我用於操作的那些行的值也需要從所有其他行中減去,並創建一個新的數據框。我不確定如何做到這一點。以下是我迄今爲止,但它不工作:從整個數據框中減去行值

NewDataFrame <- OldData[2:44] - OldData[519,] 
+0

看'sweep' ... –

+0

@BenBolker'sweep'需要一個矩陣,其中第變得複雜有一點... –

回答

4

我認爲這樣做最簡單的方法是通過sweep(),但將需要強迫一個矩陣。一些示例性的數據第一:

df <- data.frame(A = 1:10, B = 10:1, C = 21:30) 

這裏是sweep()版本

m <- data.matrix(df) 
sweep(m, 2, m[5, ]) 

R> sweep(m, 2, m[5, ]) 
     A B C 
[1,] -4 4 -4 
[2,] -3 3 -3 
[3,] -2 2 -2 
[4,] -1 1 -1 
[5,] 0 0 0 
[6,] 1 -1 1 
[7,] 2 -2 2 
[8,] 3 -3 3 
[9,] 4 -4 4 
[10,] 5 -5 5 

也可以做到這一點使用-,但由於渠道 - 治療的矩陣(與尺寸的載體,以及填充按列),你需要做的m有些變調:

t(t(m) - m[5, ]) 

R> t(t(m) - m[5, ]) 
     A B C 
[1,] -4 4 -4 
[2,] -3 3 -3 
[3,] -2 2 -2 
[4,] -1 1 -1 
[5,] 0 0 0 
[6,] 1 -1 1 
[7,] 2 -2 2 
[8,] 3 -3 3 
[9,] 4 -4 4 
[10,] 5 -5 5 
+0

完美掃描工作。謝謝! – GK89