複数のデータテーブルを一意のIDに対応するレコードにサブセット化する必要があります。類似のスレッドはhereとhereです。これらのソリューションは、私が別々に各データテーブルをプログラムすると機能しますが、私が持っているすべてのデータテーブルでコードを実行したいと思います。複数のデータテーブルの行を削除して元のデータテーブルに保存
私のデータは、このようなものになります。
dt1 <- data.table(var1 = c("A", "B", "C"), var2 = c("...", "...", "..."), id = c("101", "105", "105"))
dt2 <- data.table(var1 = c("D", "E", "F"), var2 = c("...", "...", "..."), var3 = c("...", "...", "..."), id = c("110", "110", "139"))
dt3 <- data.table(var1 = c("B", "G", "H"), id = c("105", "113", "113"))
> dt1
var1 var2 id
1: A ... 101
2: B ... 105
3: C ... 105
> dt2
var1 var2 var3 id
1: D ... ... 110
2: E ... ... 110
3: F ... ... 139
> dt3
var1 id
1: B 105
2: G 113
3: H 113
を各データテーブルは、最終的にこのになるように、私はすべての重複のIDを削除したいと思います:
> dt1
var1 var2 id
1: A ... 101
> dt2
var1 var2 var3 id
3: F ... ... 139
> dt3
var1 id
1: B 105
私は成功した各データをサブセットすることができますテーブルを個別にdt1 <- dt1[, if(.N==1) .SD, by = id]
などを使用して、代わりに私は一度に各テーブルを更新したいと思います。
私はlapply(list(dt1, dt2, dt3), function(x) x[, if(.N==1) .SD, by = id])
を試しましたが、これは私の環境で私のテーブルを更新しません。たとえば、sub <- lapply(list(dt1, dt2, dt3), function(x) x[, if(.N==1) .SD, by = id])
を使用して結果をリストに保存すると、データテーブルをdt1 <- as.data.table(sub[1])
などとして保存できますが、避けようとしている各データテーブルを手動でコーディングすることに戻ります。私はをちょうど私のコンソールにlist()
を返して試してみましたが、私が知る限り何も更新していませんでした。 hereとしてlist2env(sub, envir=.GlobalEnv)
を使用すると、「names(x)はxと同じ長さの文字ベクトルでなければなりません」というエラーが発生しました。
元のデータテーブル内の重複したIDレコードを同時に削除する方法に関する提案はありますか?