我有一个包含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
答案 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))