矩阵减法列,并将差异添加到原始列

时间:2015-02-19 19:06:37

标签: r

我有一个包含200多个列的数据框。我想在数据框中执行以下操作。  1.逐列减去,但第一列保持不变。例如,col1 =第1列,第2列=第2列+(第2列 - 第1列)。  2.在第1列中添加第2列和第1列之间的差异。  3.如果我的列在某个单元格中具有NaN值,我希望将该单元格保留为NaN

原始数据:

NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
659 731 991 1022 1150 1010 953  947 964 915
487 570 705 679 689 803 745 794 819 695
423 485 598 567 541 744 668 789 805 617
420 479 564 564 533 764 699 809 823 583
427 478 561 547 511 754 687 800 811 574

结果应如下所示(对于操作1)

NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
659 72  260 31  128 -140-57 -6  17  -49
487 83  135 -26 10  114 -58 49  25  -124
423 62  113 -31 -26 203 -76 121 16  -188
420 59  85  0 -31   231 -65 110 14  -240
427 51  83  -14 -36 243 -67 113 11  -237

结果应如下所示(对于操作2)

NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
659 803 1251 1053 1278 870  896 941 981 866
487 653 840 653 699 917 687 843 844 571
423 547 711 536 515 947 592 910 821 429
420 538 649 564 502 995 634 919 837 343
427 529 644 533 475 997 620 913 822 337

我使用下面的代码来读取数据并制作数据框但是仍然需要进一步操作?对此有任何想法吗?

data=read.table('originaldata.csv',header=TRUE, sep=',')
record=data.frame(data[3:200]) #i have first two columns with name and address

1 个答案:

答案 0 :(得分:1)

对于操作1,

 res <- cbind(df1[1], df1[-1]-df1[-ncol(df1)])
 res
 #  Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10
 #1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN
 #2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN
 #3  659   72  260   31  128 -140  -57   -6   17   -49
 #4  487   83  135  -26   10  114  -58   49   25  -124
 #5  423   62  113  -31  -26  203  -76  121   16  -188
 #6  420   59   85    0  -31  231  -65  110   14  -240
 #7  427   51   83  -14  -36  243  -67  113   11  -237

和操作2,

 cbind(res[1], res[-1] +df1[-1])
 #   Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10
 #1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN
 #2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN
 #3  659  803 1251 1053 1278  870  896  941  981   866
 #4  487  653  840  653  699  917  687  843  844   571
 #5  423  547  711  536  515  947  592  910  821   429
 #6  420  538  649  564  502  995  634  919  837   343
 #7  427  529  644  533  475  997  620  913  822   337

数据

df1 <-  structure(list(Col1 = c(NaN, NaN, 659, 487, 423, 420, 427), 
Col2 = c(NaN, 
NaN, 731, 570, 485, 479, 478), Col3 = c(NaN, NaN, 991, 705, 598, 
564, 561), Col4 = c(NaN, NaN, 1022, 679, 567, 564, 547), Col5 = c(NaN, 
NaN, 1150, 689, 541, 533, 511), Col6 = c(NaN, NaN, 1010, 803, 
744, 764, 754), Col7 = c(NaN, NaN, 953, 745, 668, 699, 687), 
Col8 = c(NaN, NaN, 947, 794, 789, 809, 800), Col9 = c(NaN, 
NaN, 964, 819, 805, 823, 811), Col10 = c(NaN, NaN, 915, 695, 
617, 583, 574)), .Names = c("Col1", "Col2", "Col3", "Col4", 
"Col5", "Col6", "Col7", "Col8", "Col9", "Col10"), 
class =  "data.frame", row.names = c(NA, -7L))