に追加基準を満たしながら、私はこのようになりますデータセットを持っている最も近い日付に基づいて:選択行R
data <- read.table(text = "OID Local_date Dateincide Join_Count TARGET_FID JOIN_FID indiv_code indiv_name sex month year treatment perturbati xx yy id_treatme id_treat_1 lion_month treatment_ OID_hc DateRecord Year_1 location village Longhomest Lathomeste Longitude Latitude Animalslos Specieslos
3 2015-10-25 2008-01-15 1 127415 2 NGAaF1 Ngamo_Urchin F 10 2015 E A 547514.43970000000 7883074.46200000000 11 11E NGAaF1_10_2015 11E_NGAaF1_10_2015 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle
3 2016-01-18 2008-01-15 1 128429 2 NGAaF1 Ngamo_Urchin F 1 2016 E A 547461.30170000000 7882858.82600000000 11 11E NGAaF1_1_2016 11E_NGAaF1_1_2016 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle
3 2016-02-23 2008-01-15 1 128858 2 NGAaF1 Ngamo_Urchin F 2 2016 E A 547395.24460000000 7883056.29100000000 11 11E NGAaF1_2_2016 11E_NGAaF1_2_2016 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle
3 2015-10-25 2008-01-15 1 130659 2 NGAaF1 Ngamo_Urchin F 10 2015 E A 547514.43970000000 7883074.46200000000 12 12E NGAaF1_10_2015 12E_NGAaF1_10_2015 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle
3 2016-01-18 2008-01-15 1 131673 2 NGAaF1 Ngamo_Urchin F 1 2016 E A 547461.30170000000 7882858.82600000000 12 12E NGAaF1_1_2016 12E_NGAaF1_1_2016 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle
3 2016-02-23 2008-01-2 2 NGAaF1 Ngamo_Urchin F 2 2016 E A 547395.24460000000 7883056.29100000000 12 12E NGAaF1_2_2016 12E_NGAaF1_2_2016 3 19-02-08 2008 E Nganyana 548505 7881998 547800 7883200 4 cattle", header = TRUE)
各行コード"OID"
、"Local_date"
、"Dateincide"
およびその他の属性を持つレコードです。私は現在、NAとしてコード化されていないが、空白のままのデータが欠落しています。元のデータセットは大きく、120,000行と40個の列があるため、最も効率的な方法で以下を実行するRコードを見つけようとしています。の値と同じOID
を共有するすべての行について、"Dateincide"
が"Local_date"
に最も近い(前または後の)行を探します。次に、最も近い日付の新しい行を"Keep/delete"
という名前で保存します。
条件があります:同じOIDを持ち、同じ「Local_date」を持つ行があるため、場合によっては同じ一致である2つ以上のレコードが存在するようです。私は、これらのマッチのすべてを "id_treat_1"という列に基づいて異なるレコードを表現しているので、1つだけではないようにしたい。
私が欲しいの出力は、以下の(私はそれを明確にすることを短くしているが、私は同様に、列のすべての残りの部分を残しておきたい)である:
OID Local_date Dateincide keep/delete id_treat_1
3 2015-10-25 2008-01-15 keep 11E
3 2016-01-18 2008-01-15 delete 11E
3 2016-02-23 2008-01-15 delete 11E
3 2015-10-25 2008-01-15 keep 12E
3 2016-01-18 2008-01-15 delete 12E
3 2016-02-23 2008-01-15 delete 12E
13 2011-11-08 2008-02-14 keep 7E
だからと2つのレコードがあります同じOID = 3は、 "Local_date"から "Dateincide"に最も近い日付を持ち、 "id_treat_1"列に異なる値を持つため、 "keep"とラベル付けされています。 OID 13のレコードの場合は、最も近い日付の行が選択され、「id_treat_1」列に別の値を持つ別の一致がなかったため、1つしかありません。
複数の一致を許可するこの「保存/削除」列の計算方法や、欠落しているデータを処理する方法については、非常に感謝しています。
を行うことができ、あなたは考慮にあなたの制約のすべてを取る例を投稿できますか?すなわち、異なるIDおよび異なるid_treatを有するか? – Sotos