1. ホーム
  2. r

[解決済み] R: Error in sort.list(bx[m$xi]) : 'x' must be atomic for 'sort.list' リストに対して 'sort' を呼び出したことがありますか?データフレームをマージするエラー

2022-02-08 02:23:16

質問

2つのデータフレームを結合したいのですが、どうすればよいですか?データフレームは次のようなものです。

> head(tk1_h)
    userId                  hobbies
1 102802401691 566588ca00016a4e470bb345
2 102802401691 566588ca00016a4e470bb34c
3 102802401691 575949efb3e4c06ffd5384e1
4 102802401691 55b3cd55ef481d737db42084
5 102802401691 566588ca00016a4e470bb350
6 102802401691 566588ca00016a4e470bb34c

そして

> head(tags)
          _id              type     content
1 55a9098ad77b192554c38d50 feed adok-veszek
2 55a909a4d77b192554c38d51 feed keres-kínál
3 55a909dad77b192554c38d52 feed   jó-helyek
4 55a909e6d77b192554c38d53 feed     oktatás
5 55a909ebd77b192554c38d54 feed     program
6 55a909f0d77b192554c38d55 feed       sport

ここで、"hobbies" と "_id" は同一なので、2つのデータフレームをマージすることで、どのユーザーがどの趣味を持っているか(<-- dfタグの内容)を確認することができます。以下のようなコードを使いました。

tk1_h2 <- merge.data.frame(tk1_h, tags, by.x = "profile", by.y = "_id")

by.x = "profile" なぜなら、tk1_h dataframeはネストされていて、このような形になっているからです。

> str(tk1_h)
'data.frame':   27716 obs. of  2 variables:
 $ userId : num  1.03e+11 1.03e+11 1.03e+11 1.03e+11 1.03e+11 ...
 $ profile:'data.frame':    27716 obs. of  1 variable:
 ..$ hobbies: chr  "566588ca00016a4e470bb345" "566588ca00016a4e470bb34c" 
 "575949efb3e4c06ffd5384e1" "55b3cd55ef481d737db42084" ...

2つのデータフレームをマージすると、このエラーが発生します。

 Error in sort.list(bx[m$xi]) : 'x' must be atomic for 'sort.list'
 Have you called 'sort' on a list?

この問題について他のスタックオーバーフローの投稿を見ましたが、unlist()は私を助けてはくれませんでした。 どのようにすれば2つのデータフレームを正しくマージするコードを書くことができますか? ありがとうございます。

解決方法は?

私が見る限り、問題はあなたがネストされたデータフレームを持っていることです。ネストされたデータフレームのリストを解除する(ベクトルに変換する)以外の解決策は思いつきません。

tk1_h$profile <- unlist(tk1_h$profile)