データの条件抽出方法を知りたい

このQ&Aのポイント
  • 特定の条件を持つ行をcsvファイルから抽出する方法を教えてください。
  • 行の条件を計算するために必要な式についても教えてください。
  • 自分で試してみたがうまくいかなかったので、どうすればいいかアドバイスをください。
回答を見る
  • ベストアンサー

データの選択

csvファイルから、特定の条件を持つ行を抽出したいです。 a1, b1, c1, d1, e1 a2, b2, c2, d2, e2 a3, b3 ,c3, d3, e3 :   :   :   :  : an, bn, cn, dn, en とあったときに d-c/d+c > 0.5となる行だけを出力したいのですが file.each{|line| x = line.split(",").map{|i|i.to_i} if 0.5<(x[3]-x[2])/(x[3]+x[2]) p x end } と自分でやってみたものの、出来ませんでした。 どうしたらよいのでしょうか。

  • Ruby
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

通常はto_fでしょう。 mapのto_i→to_fに変更でもいいし、 0.5<(x[3].to_f-x[2].to_f)/(x[3].to_f+x[2].to_f) と使うところで変更してもいい。 あるいは、(x[3]+x[2])<2*(x[3]-x[2]) と式を変形するとかでもいいです。 とにかく、整数同士の演算は整数になるので、小数になならない、と覚えてください

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

なにが上手くいってないのか、がわかりません 整数 / 整数 は整数になるので、 (x[3]-x[2])/(x[3]+x[2]) = 0.8とかだと、0になります。 あと、(x[3]+x[2])が0になることはありませんか?

Summers226
質問者

お礼

実は計算の結果がすべて∓1.0、少数となるものでした。 これでは結果は出力されませんよね。 ということはto_fとすればよいのでしょうか。 バカな質問に答えていただいてありがとうございます。

関連するQ&A

  • 数学の問題です。お知恵をお貸しください。

    コインを投げ,点Pを次の規則によって正三角形ABC の頂点A, B, C 上を動かす. 点PがAにあるときは,表が出たらBに動かし、裏が出たらC に動かす. Bにあるときは,表が出たらCに動かし,裏が出たらAに動かす. C にあるときは,表が出たらA に動かし,裏が出たらBに動かす. はじめに点PはAにあるとし,コインをn回投げた後にPがA にある確率をan、B にある確率をbn、 C にある確率をcnとする. (1) (i)an+1をan, bn, cnを用いて表せ. (ii)bn+1をan, bn, cnを用いて表せ. (iii) cn+1 をan, bn, cnを用いて表せ. (2) an を求めよ.

  • IF関数

    A列とB列に数字が入力されており、An>=Bn(nは任意の整数)のとき、Cn(C列)にXという文字を入力、An<Bnの場合は、Cnは空欄にしたいのです。 IF関数を使ってCnに =IF(An>=Bn,X,) と入れてみましたが、An>=Bnの時は、♯Name?というエラーメッセージがでて、An<Bnの場合は0が入力されます。 どこが間違っているでしょうか。

  • 余りに関する漸化式 

    整数n>=0、数列{an}をa0=1,a1=2,a(n+2)=a(n+1)+anによって定める。 anを3で割った余りをbnとし、cn=b0+b1+・・・+bnとおく。 (1)b0,b1,......b9を求めよ。 これはわかりました。 なぜ、求めさせたかもわかります。 (2)c(n+8)=cn+c7を示せ。  (1)から{bn}は周期8の数列でc(n+8)-cn=b(n+1)+......+b(n+8)となり、  右辺は順番は異なるが、1+2+0+2+2+1+0+1=9=c7となる。  よって、c(n+8)-cn=c7 このように考えましたが、答案としてこれで良いのでしょうか。  また、この漸化式をなぜ問題として、示させたのか。たぶん次ぎの(3)  につながるのだろうとは思うが、よく分かりません。 (3)n+1=<cn=<3(n+1)/2 を示せ。   (2)を使うのだろうと思うのですが、どう使っていくのかとっかかりができません。   方針だけで良いので、示してもらえるとありがたいです。

  • 行列式 |AB|=|A||B| の証明

    |AB|=|A||B| の証明について質問します。 この証明では線形性と交代性をもつ関数F(a1,...,an)とその定理 F(a1,...,an)= F(e1,...,en)|A|・・・(1) を使います。 [証](しばし証明にお付き合いください) Bの列ベクトルを b1,...,bnとすれば、 |AB|=D(Ab1,...,Abn). この右辺をF(b1,...,bn)とおく。定理(1)により F(b1,...,bn)=F(e1,...,en)D(b1,...,bn)         =F(e1,...,en)|B| Aの列ベクトルをa1,...,anとすれば、Aej=aj であるから、 F(e1,...,en)=D(a1,...,an)=|A|・・・(*) ■ 証明の最後の行にある(*)で F(e1,...,en) と D(a1,...,an)が等しいというのが分かりません。 説明していただけないでしょうか、お願いします。

  • 係数を求める計算です。

    r>0の定数、g(θ)はθ∈[0,2π]で連続な関数とします。 係数an,bn.cn.dnを(n∈N)求めるために次の3つの方程式を考えます。 a0,c0はan,cnにおいてn=0としたものです。 このとき 2π (a0+c0•logr) = ∫(0~2π)g(θ)dθ 2π {bn(r^n)+dn(r^(-n))} = ∫(0~2π)g(θ)(e^inθ)dθ 2π {an(r^n)+cn(r^(-n))} = ∫(0~2π)g(θ)(e^(-inθ))dθ 以上の3つの方程式から、 an,bn.cn.dnを計算して求めたいところです。 どのように計算をすれば求められますでしょうか? テキスト等や問題集には詳しい計算が省略されていて困っています。 どなたか解法、途中計算をよろしくお願い致します。

  • テキストファイルのデータをエクセルへコピーのやり方

    よろしくお願いします。 エクセル2000を使っています。 テキストのデータで A1/B1/C1    /はスペースです。 D1/E1/F1    データの長さは全部違います。 A2/B2/C2     D2/E2/F2 A3/B3/C3     D3/E3/F3      ・    ・(続く) といったものがあります。これをエクセルで    A列 B列 C列 D列 E列 1行 A1 B1 C1 D1 E1 2行 A2 B2 C2 D2 E2  ・・・ 3行 A3 B3 C3 D3 E3  (続く)          ・          ・(続く) という感じで別々のセルにいれて貼り付けしたいのです。 テキストデータを別々のセルに貼り付けする方法は 過去ログで「区切り位置」というのをつかえばいいというのはわかりましたが、この場合の複数行にわたるテキストデータをエクセルの1行に貼り付けする方法がわかりません。また、データの長さが違うために「区切り位置」もうまくいきません。 良い解決法をお願いします。

  • excelのデータの移動?集約?をしたいです

    よろしくお願いします EXCEL2000を使用しています。OSはXPです。 データがランダムにA~O列 1~200行まであります この量は、その時その時変わるのですが だいだい、その範囲にあります そのランダムに入っているデータを空白のセルを除いて A列に並べたいのです 順番は1行目から横にあるデータを順番に下に並べ 次は2行目のデータで、その次は3行目。。。としたいです 例 A1 B1 C1 D1 E1 A2 C2 E2 A3 B3 D3 というデータを A1 B1 C1 D1 E1 A2 C2 E2 A3 B3 D3 というようにしたいのですが よろしくお願いします

  • 4元連立方程式について

    Excelで方程式を解いたのですがひとつだけ答えが合わないのです。どなたかこの式の違うところを教えてください。 5x-2y+4z+3m=75 x+3y-5z-m=-36 4x-3y+z+4m=51 3x+5y-3z-2m=-12 Excel上での計算式↓ =(A1*E2*C3*D4-A1*E2*C4*D3-A1*E3*C2*D4+A1*E3*C4*D2+A1*E4*C2*D3-A1*E4*C3*D2-A2*E1*C3*D4+A2*E1*C4*D3+A2*E3*C1*D4-A2*E3*C4*D1-A2*E4*C1*D3+A2*E4*C3*D1+A3*E1*C2*D4-A3*E1*C4*D2-A3*E2*C1*D4+A3*E2*C4*D1+A3*E4*C1*D2-A3*E4*C2*D1-A4*E1*C2*D3+A4*E1*C3*2+A4*E2*C1*D3-A4*E2*C3*D1-A4*E3*C1*D2+A4*E3*C2*D1)/(A1*B2*C3*D4-A1*B2*C4*D3-A1*B3*C2*D4+A1*B3*C4*D2+A1*B4*C2*D3-A1*B4*C3*D2-A2*B1*C3*D4+A2*B1*C4*D3+A2*B3*C1*D4-A2*B3*C4*D1-A2*B4*C1*D3+A2*B4*C3*D1+A3*B1*C2*D4-A3*B1*C4*D2-A3*B2*C1*D4+A3*B2*C4*D1+A3*B4*C1*D2-A3*B4*C2*D1-A4*B1*C2*D3+A4*B1*C3*D2+A4*B2*C1*D3-A4*B2*C3*D1-A4*B3*C1*D2+A4*B3*C2*D1)

  • ある問題を解いてほしいのですが・・・

    図のように4地点A,B,C,Dが4本の道で結ばれている。動点XがAを出発して、それら4地点間を次のルールで行き来するものとする。 a)XがA,B,Cのいずれかにあれば、次のステップで道の本数に応じて隣の地点に移動する。たとえばXがAにあれば、次のステップではBに移動する。XがBにあれば、確率1/3でAに、確率2/3でCに移動する。 b)XがひとたびDに移動してきたら、以後Dにとどまり続け、他には移動しない。 nステップ後に動点XがA,B,C,Dにある確率をそれぞれAn,Bn,Cn,Dnとする。 (1)B1,B2,B3,B4を求めよ。 (2)nが偶数のときBn=0であることを示せ。 (3)lim(n→∞)Dnを求めよ。 (図)A-B=C-D (BからCはイコールではなく、2通りの道の意味です。)

  • データ抽出について教えて下さい。

    以前質問し、マクロを作って頂いたのですが、行と列を挿入しなくてはならなくなり、マクロが機能しなくなってしまいました。 ●以前の質問● セルA1:カベシタジゴウハン 9X 50X1800 D9 セルA2:ウケゴウハン T5.5 40X 300 U7 セルA3:ゴウハンK 2.5X 60X 80 スペーサー セルA4:ランバP *412X3547 W2 セルA5:VSF K 12.5X 47X 869 LE セルA6:VSF J*12X 68X2395 Wメン WX とシートに入っているとします。これを、 セルB1:9  セルC1:50  セルD1:1800 セルB2:5.5  セルC2:40  セルD2:300 セルB3:2.5  セルC3:60  セルD3:80 セルB4:空白 セルC4:412 セルD4:3547 セルB5:12.5 セルC5:47  セルD5:869 セルB6:12  セルC6:68  セルD6:2395 と入るように関数を使うにはどうしたら良いでしょうか。 マクロでも構いません。 ●採用させて頂いた回答● Sub test() Dim i, ii, iii Dim a As String For i = 1 To Range("a65536").End(xlUp).Row a = "" iii = 0 For ii = 1 To Len(Cells(i, 1).Value) If IsNumeric(Mid(Cells(i, 1).Value, ii, 1)) Or Mid(Cells(i, 1).Value, ii, 1) = "." Then a = a & Mid(Cells(i, 1).Value, ii, 1) ElseIf a <> "" Then Cells(i, 2).Offset(, iii).Value = a a = "" iii = iii + 1 End If If iii = 3 Then Exit For Next ii Next i End Sub ●今回セルが変わりました● セルB2:カベシタジゴウハン 9X 50X1800 D9 セルB3:ウケゴウハン T5.5 40X 300 U7 セルB4:ゴウハンK 2.5X 60X 80 スペーサー セルB5:VSF K 12.5X 47X 869 LE セルB6:VSF J*12X 68X2395 Wメン WX とシートに入っています。これを、 セルC2:9  セルD2:50  セルE2:1800 セルC3:5.5  セルD3:40  セルE3:300 セルC4:2.5  セルD4:60  セルE4:80 セルC5:12.5 セルD5:47  セルE5:869 セルC6:12  セルD6:68  セルE6:2395 このように入るようにしたいのです。 以前採用させて頂いたマクロを修正したいのですが、どうも自分では失敗してしまいます。 お力をお貸し頂ければ幸いです。

専門家に質問してみよう