次のようにデータ フレームを変換する方法を教えてください。
tg qr loc a1 a2 a3 b1 b2 b3 c1 c2 c3
1 A 1 89 NA NA NA 1 2 3 1 2 3
2 A 1 61 1 2 3 NA NA NA 1 2 3
3 A 2 38 4 5 6 NA NA NA NA NA NA
4 B 1 40 4 5 6 NA NA NA NA NA NA
5 B 1 3 NA NA NA NA NA NA 4 5 6
これに:
tg qr loc a1 a2 a3 b1 b2 b3 c1 c2 c3
1 A 1 15 1 2 3 1 2 3 1 2 3
2 A 2 95 4 5 6 NA NA NA NA NA NA
3 B 1 42 4 5 6 NA NA NA 4 5 6
関数は次のことを行う必要があります。
- 列 'tg' および 'qr' に同じ値を持つすべての行を 1 つの行にマージします
- マージ中に、すべての「NA」を既存の値に置き換えます - 反対方向にはなりません
- 多くの場合、マージされる両方の行に変数が存在する場合がありますが、その値は常に等しくなります (その場合、どの行から取得されるかは問題ではありません)。
- 「loc」列の値は異なりますが、関連性はありません。列を削除することもできます
これらのサンプル データフレームのコードは次のとおりです。
df = rbind(c("A","1",floor(runif(1,1,100)),c(NA,NA,NA),c(1,2,3),c(1,2,3)),
c("A","1",floor(runif(1,1,100)),c(1,2,3),c(NA,NA,NA),c(1,2,3)),
c("A","2",floor(runif(1,1,100)),c(4,5,6),c(NA,NA,NA),c(NA,NA,NA)),
c("B","1",floor(runif(1,1,100)),c(4,5,6),c(NA,NA,NA),c(NA,NA,NA)),
c("B","1",floor(runif(1,1,100)),c(NA,NA,NA),c(NA,NA,NA),c(4,5,6)))
df = as.data.frame(df)
colnames(df) = c("target","query","loc",c("a1","a2","a3"),c("b1","b2","b3"),c("c1","c2","c3"))
df2 = rbind(c("A","1",floor(runif(1,1,100)),c(1,2,3),c(1,2,3),c(1,2,3)),
c("A","2",floor(runif(1,1,100)),c(4,5,6),c(NA,NA,NA),c(NA,NA,NA)),
c("B","1",floor(runif(1,1,100)),c(4,5,6),c(NA,NA,NA),c(4,5,6)))
df2 = as.data.frame(df2)
colnames(df2) = c("target","query","loc",c("a1","a2","a3"),c("b1","b2","b3"),c("c1","c2","c3"))
ご支援いただきありがとうございます。