問題タブ [tidyr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - dplyr または tidyr で rbind に似たものを実行していますか?
次のデータを使用して、それぞれの果物がいくつの固有のパートナーを持っているかという質問に興味がありますか?
私のDF:
私はdplyrとtidyrを理解しようとしています。n_distinct()
これを行うには、 in dplyrを使用するとよいと考えました。私は次のことをしました:
これにより、基本的に下の 10 行が複製されますが、下半分の果物の順序が入れ替わります。次に、新しい最初の列の各果物について、新しい 2 番目の列にある一意のパートナー フルーツの数を を使用して数えますn_distinct()
。
これは問題なく動作しますが、いかにエレガントdplyr
であるかを考えると、これを行うためのより効率的な方法があるかどうか、特にこれらのパッケージのいずれかを使用してこれをtidyr
実行する方法があるかどうか疑問に思っていますか?rbind
最終的なデータは次のようになります。
再現用データ:
r - R の文字列分割オプション
Rの文字列分割のオプションについて質問したいのですが、私の知る限り、3つのオプションが見えます。strsplit()
ベースでstr_split()
、stringr
パッケージseparate()
で、tidy
パッケージで。それらはプログラミングの観点からどのように異なるのだろうか。私はプログラマーとしての訓練を受けていないので、この文章は明確でないかもしれません。例を挙げましょう。以前、パッケージでrbind()
との違いを学びました。( rbindlist が rbind よりも「優れている」のはなぜですか? )。これは私にとって大きな学びでした。とに関連するこの投稿のように、どの文字列オプションが他のものよりも優れているかを知りたいです。この例が私が尋ねようとしていることを明確にしてくれることを願っています。お時間をいただきありがとうございます。rbindlist()
data.table
rbind()
rbindlist()
r - NAを使用したtidyrのseparate()
tidyrパッケージseparate()
に関連する質問があります。データ フレームに NA がない場合、separate() が機能します。私はこの機能をよく使っています。しかし、今日、データ フレームに NA が含まれているケースがありました。エラーメッセージを返しました。私はとても愚かかもしれません。しかし、tidyrはこの種のデータ クリーニング用に設計されていないのではないかと思います。または、NA を使用する方法はありますか? お時間を割いていただき、誠にありがとうございます。separate()
separate()
コメントに基づいて更新されたサンプルを次に示します。y の文字を区切り、新しい列を作成したいとします。NAで行を削除するseparate()
と動作します。しかし、行を削除したくないのですが、どうすればよいでしょうか?
r - 列名の文字列を使用して列を削除することにより、tidyr を使用して data.table を収集する方法は?
tidyr にバグが見つかったようです。
私はこのようなコードを持っています
しかし
動作します。
唯一の違いは、一方のコード セットは関数内にあり、もう一方は関数内にないことです!
r - 複数の列セットを収集する
回答者が質問のループを 1 ~ 3 回繰り返すオンライン調査のデータがあります。調査ソフトウェア (Qualtrics) は、このデータを複数の列に記録します。つまり、調査の Q3.2 には、列Q3.2.1.
、Q3.2.2.
、およびがありQ3.2.3.
ます。
すべての QN.N* 列を個々の QN.N 列にまとめて、最終的には次のようにしたいと考えています。
tidyr
ライブラリには関数があり、1 つの列セットgather()
を組み合わせるのに最適です。
結果のデータ フレームには、予想どおり 30 行が含まれます (10 人、それぞれ 3 ループ)。ただし、列の 2 番目のセットを収集することは正しく機能しません。2 つの結合された列Q3.2
とは正常に作成されますQ3.3
が、30 行ではなく 90 行になります (10 人の個人、Q3.2 の 3 つのループ、および Q3 の 3 つのループのすべての組み合わせ)。 .3; 組み合わせは、実際のデータの列のグループごとに大幅に増加します):
gather()
正しい行数を維持しながら、このような列の小さなサブセットを組み合わせて、このように複数の呼び出しを使用する方法はありますか?
r - tidyr/dplyr にゼロ カウント行を追加するための適切なイディオム
次のようなカウント データがあるとします。
以下のように整理してまとめたいと思います。
私はそれを知っておりx=="B"
、y=="ii"
欠損値ではなくゼロのカウントを観察しました。つまり、現場作業員は実際にそこにいましたが、正の数がなかったため、生データに行が入力されませんでした。これを行うことで、ゼロカウントを明示的に追加できます。
しかし、それは少し回りくどい方法のように思えます。これのためのよりクリーンなイディオムはありますか?
明確にするために: 私のコードは、spread
thenを使用して、必要なことを既に実行してgather
いるため、私が興味を持っているのは、and内 でより直接的なルートを見つけることです。tidyr
dplyr
r - 重複した識別子を持つ data.frame/tibble で拡散する
tidyr のドキュメントは、gather と spread が推移的であることを示唆していますが、「アイリス」データを使用した次の例はそうではないことを示していますが、その理由は明らかではありません。明確化をいただければ幸いです
データ フレーム「w.iris.df」は「iris.df」と同じであると予想していましたが、代わりに次のエラーを受け取りました。
「エラー: 行の識別子が重複しています (1、2、3、4、5、6、7、8、9...」
私の一般的な質問は、この種のデータセットで「収集」の適用を逆にする方法です。
r - tidyr の spread() が因子レベルを処理する方法
私は自分のデータを操作していて、プロセスのある時点で何か間違ったことをしたことに気付きました。問題を調査したところ、問題はパッケージspread()
内の次の動作に帰着しました。tidyr
ここに実例があります。次のようなデータフレームがあるとします。
私がやりたかったのは、この長いフォーマットのデータ フレームをワイド フォーマットに変換することでした。spread()
そして、私は行く方法だと思いました。しかし、結果は私が期待したものではありませんでした。
factor1 が "A" で factor2 が "level2" の場合、値は 2 のはずですが、結果のワイド フォーマットは 3 になります。明らかに、num は factor2 のアルファベット順 (level1 > level10 > level2) で並べられ、ワイドフォーマット。ただし、その場合、factor2 ラベルは元のデータ フレームに表示される順序と同じ順序を保持します (レベル 1 > レベル 2 > レベル 10)。
なぜこれが起こるのか(および/または関連情報を見つけることができる場所)を誰か説明できますか?