2

特定の値が2番目のデータフレームにあるすべての行を最初のデータフレームから削除しようとしています。

統計データ分析のための R プログラミング言語の使用。

これは私がここに投稿する最初の質問です。よろしければご容赦ください ;)

私は機密データを扱っているので、例を使って問題を再現しました。

Name=c("Bussieres", "Nelson")
Fname=c("Paul", "Robert")
Tel=c(123,234)
comp1=data.frame(Name, Fname, Tel)

Name=c("Bussieres","Bussieres","Nelson","Nelson")
Fname=c("Robert","Paul","Paul","Paula")
Tel=c(123,234,345,456)
comp2=data.frame(Name, Fname, Tel)

comp1 の戻り値:

   Name Fname Tel
1 Bussieres   Paul 123
2    Nelson Robert 234

comp2 の戻り値:

   Name Fname Tel
1 Bussieres Robert 123
2 Bussieres   Paul 234
3    Nelson   Paul 345
4    Nelson  Paula 456

今、私が欲しいのは、「名前」と「Fname」がcomp2で同一でないcomp1の行を返すことです。

新しいデータフレームcomp3に保存される予想されるリターンは次のようになります(ここでわずかな編集が行われ、誤った予想結果が投稿されました):

   Name Fname Tel
1    Nelson Robert 234

私の最初の試みは match 関数を使用することでしたが、うまくいきませんでした。

次の for ループでの試行も機能しませんでした。

for (i in comp1[,"Name"]){for (j in comp3[,"Name"]){if i!=j return comp3=x1["Name"==i,]}}

データセットから特定の観測を除外することは非常に日常的な手順になるため、これを行うための基本的な (プリミティブ) 関数が R に見つからないことに驚いています。

4

1 に答える 1

6

data.table解決策:

require(data.table)
dt1 <- data.table(comp1, key=c("Name", "Fname"))
dt2 <- data.table(comp2, key=c("Name", "Fname"))
dt1[!dt2]

#      Name  Fname Tel
# 1: Nelson Robert 234
于 2013-02-01T23:59:50.893 に答える