2017-12-13 4 views
3

Hilfe in N-Nummer oder Spalte weise Subtraktion, unten sind die Spalten in einem Eingabedatenfeld.n Anzahl der Spalten weise Subtraktion

Eingangsdatenrahmen:

A B C D 
1 4 6 2 
3 3 3 4 
1 2 2 2 
4 4 4 4 
5 2 3 2 

Erwartete Ausgabe:

A  B-A  C-B  D-C 
1  3  2  -4 
3  0  0  1 
1  1  0  0 
4  0  0  0 
5  -3  1  -1 

ähnlich wird es viele Spalte sein bis 10.

ich in der Lage bin, den Code für zwei Spalten zu schreiben:

Code:

df$(B-A) <- df$B - df$A 
df$(C-B) <- df$C - df$B 

und so weiter ... aber das sollte in Schleife kommen, da es fast 10 bis 12 Spalten gibt. Bitte hilf mir.

Antwort

5

ist hier ein Vectorized Weg, dies zu tun,

cbind.data.frame(df[1], df[-1] - df[-ncol(df)]) 

, die Sie können auch diese

cbind(df[1], t(apply(df, 1, diff))) 

Ausgabe versuchen

A B C D 
1 1 3 2 -4 
2 3 0 0 1 
3 1 1 0 0 
4 4 0 0 0 
5 5 -3 1 -1 
+1

danke Sotos. – Pradnya

1

Mit apply() gibt :

A B C D 
1 1 3 2 -4 
2 3 0 0 1 
3 1 1 0 0 
4 4 0 0 0 
5 5 -3 1 -1 
+0

danke für die Antwort – Pradnya

2

ist die lehr/Pädagogische einfache Lösung:

df <- data.frame(A=c(1,3,1,4,5), B=c(4,3,2,4,2), C=c(6,3,2,4,3), D=c(2,4,2,4,2)) 
df 

das Muster Get:

cbind(df[1], df[2] - df[1], df[3] - df[2], df[4] - df[3]) # solved 

zu beenden Verwenden Sie nun die dynamische Programmierung in R, (im allgemeinen Fall) :

cbind(df[1], sapply(1:(ncol(df)-1), function(i) df[i+1] - df[i])) 

Ausgabe:

A B C D 
1 1 3 2 -4 
2 3 0 0 1 
3 1 1 0 0 
4 4 0 0 0 
5 5 -3 1 -1 
+0

danke Erdogan für die Antwort und Erklärung. – Pradnya