将两个数字向量相乘会返回全1

时间:2014-03-26 09:59:09

标签: r

可能我忽视了一些非常简单的事情,但我似乎无法找到它。我将一个新列分配给一个数据帧,该数据帧保存两个其他列的相乘值。新栏目的结果都是1,但显然不应该。另一方面,划分列似乎不是问题。

可重现的例子:

testset<-
  read.table(text='"afd" "yr" "val1" "val2" "val3" "val4"
"1" "1" 2012 875.309027777778 514 0.587221179821412 1.70293585170774
"2" "1" 2013 929.445833333333 531 0.571308171984202 1.75036880100439
"3" "2" 2012 5983.97777777778 816 0.136364142766424 7.33330610021786
"4" "2" 2013 5515.6125 622 0.11277079381483 8.86754421221865
"5" "3" 2012 1289.25416666667 324 0.251308088332725 3.97917952674897
"6" "3" 2013 1032.18472222222 281 0.272238092611007 3.67325523922499
"7" "4" 2012 292.047916666667 105 0.359530042872531 2.78140873015873
"8" "4" 2013 276.289583333333 97 0.35108091600751 2.84834621993127
"9" "5" 2012 4605.56180555556 794 0.172400248552136 5.80045567450322
"10" "5" 2013 5728.63680555555 855 0.149250167015446 6.70016000649773
"11" "6" 2012 863.24375 352 0.407764319174046 2.45239701704545
"12" "6" 2013 819.725 342 0.417213089755711 2.3968567251462
"13" "7" 2012 8875.80902777778 519 0.0584735429047352 17.1017514986084
"14" "7" 2013 9065.16805555556 541 0.0596789818660284 16.7563180324502
"15" "8" 2012 811.765277777778 121 0.149057866001906 6.70880394857668
"16" "8" 2013 741.938194444444 115 0.154999433727914 6.45163647342995
"17" "9" 2012 628.202777777778 261 0.415470942238219 2.40690719455087
"18" "9" 2013 609.850694444444 261 0.427973604650501 2.33659269902086
"19" "10" 2012 27.2923611111111 6 0.219841734307015 4.54872685185185
"20" "10" 2013 39.0069444444444 5 0.128182303720847 7.80138888888889
"21" "11" 2012 15305.5229166667 2324 0.151840614179168 6.58585323436604
"22" "11" 2013 14206.5472222222 2317 0.163093816094575 6.1314403203376
"23" "12" 2012 1545.67986111111 202 0.130686829195531 7.65188050055005
"24" "12" 2013 1408.35 214 0.151950864486811 6.58107476635514
"25" "13" 2012 1067.82847222222 333 0.311847837609167 3.20669210877544
"26" "13" 2013 1151.11875 327 0.284071473946541 3.52024082568807')

testset$val5<-
  testset$val3 * testset$val4

testset$val6<-
  testset$val3 / testset$val4

输出:

   afd   yr        val1 val2       val3      val4 val5        val6
1    1 2012   875.30903  514 0.58722118  1.702936    1 0.344828714
2    1 2013   929.44583  531 0.57130817  1.750369    1 0.326393027
3    2 2012  5983.97778  816 0.13636414  7.333306    1 0.018595179
4    2 2013  5515.61250  622 0.11277079  8.867544    1 0.012717252
5    3 2012  1289.25417  324 0.25130809  3.979180    1 0.063155755
6    3 2013  1032.18472  281 0.27223809  3.673255    1 0.074113579
7    4 2012   292.04792  105 0.35953004  2.781409    1 0.129261852
8    4 2013   276.28958   97 0.35108092  2.848346    1 0.123257810
9    5 2012  4605.56181  794 0.17240025  5.800456    1 0.029721846
10   5 2013  5728.63681  855 0.14925017  6.700160    1 0.022275612
11   6 2012   863.24375  352 0.40776432  2.452397    1 0.166271740
12   6 2013   819.72500  342 0.41721309  2.396857    1 0.174066762
13   7 2012  8875.80903  519 0.05847354 17.101751    1 0.003419155
14   7 2013  9065.16806  541 0.05967898 16.756318    1 0.003561581
15   8 2012   811.76528  121 0.14905787  6.708804    1 0.022218247
16   8 2013   741.93819  115 0.15499943  6.451636    1 0.024024824
17   9 2012   628.20278  261 0.41547094  2.406907    1 0.172616104
18   9 2013   609.85069  261 0.42797360  2.336593    1 0.183161406
19  10 2012    27.29236    6 0.21984173  4.548727    1 0.048330388
20  10 2013    39.00694    5 0.12818230  7.801389    1 0.016430703
21  11 2012 15305.52292 2324 0.15184061  6.585853    1 0.023055572
22  11 2013 14206.54722 2317 0.16309382  6.131440    1 0.026599593
23  12 2012  1545.67986  202 0.13068683  7.651881    1 0.017079047
24  12 2013  1408.35000  214 0.15195086  6.581075    1 0.023089065
25  13 2012  1067.82847  333 0.31184784  3.206692    1 0.097249074
26  13 2013  1151.11875  327 0.28407147  3.520241    1 0.080696602

1 个答案:

答案 0 :(得分:4)

您的val3val4似乎恰好在机器精度内乘以1:

summary(testset$val3 * testset$val4)

我建议你重新考虑数据的来源。