タグ付けされた質問 「dplyr」

group_by、summary、filter、selectなど、dplyrパッケージの関数に関連する質問には、このタグを使用します。

1
dplyrメッセージ `summarise()`の再グループ化出力を 'x'で解釈する方法( `.groups`引数でオーバーライド)?
dplyr開発バージョン0.8.99.9003に更新した後、group_byとsummarise()を実行すると、新しいメッセージ(投稿のタイトルを参照)が表示され始めました。 出力を再作成する例を次に示します。 library(tidyverse) library(hablar) df <- read_csv("year, week, rat_house_females, rat_house_males, mouse_wild_females, mouse_wild_males 2018,10,1,1,1,1 2018,10,1,1,1,1 2018,11,2,2,2,2 2018,11,2,2,2,2 2019,10,3,3,3,3 2019,10,3,3,3,3 2019,11,4,4,4,4 2019,11,4,4,4,4") %>% convert(chr(year,week)) %>% mutate(total_rodents = rowSums(select_if(., is.numeric))) %>% convert(num(year,week)) %>% group_by(year,week) %>% summarise(average = mean(total_rodents)) 出力ティブルは正しいですが、次のメッセージが表示されます。 summarise()'年'による出力の再グループ化(.groups引数でオーバーライド) これはどのように解釈されるべきですか?年と週の両方でグループ化したときに、「年」のみで再グループ化が報告されるのはなぜですか?また、オーバーライドするとはどういう意味ですか?なぜそれをやりたいのですか? このメッセージはdplyrビネット全体に表示されるため、問題を示しているとは思いません:https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html dplyrを使用してpairwise.wilcox.testの出力を溶かす方法などのごく最近のSOの質問にのみ表示されているため、これは新しいメッセージだと思います。およびR複数の列に集約します(どちらも再グループ化/オーバーライドメッセージに対応していません)。 ありがとうございました!
111 r  dplyr  summarize 

5
複数の列セットを収集する
回答者が一連の質問を1〜3回繰り返すオンライン調査のデータがあります。調査ソフトウェア(Qualtrics)が複数の列-で、このデータを記録し、調査でQ3.2は列がありますQ3.2.1.、Q3.2.2.とQ3.2.3.: df <- data.frame( id = 1:10, time = as.Date('2009-01-01') + 0:9, Q3.2.1. = rnorm(10, 0, 1), Q3.2.2. = rnorm(10, 0, 1), Q3.2.3. = rnorm(10, 0, 1), Q3.3.1. = rnorm(10, 0, 1), Q3.3.2. = rnorm(10, 0, 1), Q3.3.3. = rnorm(10, 0, 1) ) # Sample data id time Q3.2.1. Q3.2.2. …
108 r  reshape  dplyr  qualtrics  tidyr 

6
dplyrを使用して複数の列にまたがる合計
私の質問には、データフレームの複数の列にわたる値を合計し、を使用してこの合計に対応する新しい列を作成することが含まれますdplyr。列のデータエントリはbinary(0,1)です。のsummarise_eachormutate_each関数の行方向のアナログを考えていdplyrます。以下は、データフレームの最小限の例です。 library(dplyr) df=data.frame( x1=c(1,0,0,NA,0,1,1,NA,0,1), x2=c(1,1,NA,1,1,0,NA,NA,0,1), x3=c(0,1,0,1,1,0,NA,NA,0,1), x4=c(1,0,NA,1,0,0,NA,0,0,1), x5=c(1,1,NA,1,1,1,NA,1,0,1)) > df x1 x2 x3 x4 x5 1 1 1 0 1 1 2 0 1 1 0 1 3 0 NA 0 NA NA 4 NA 1 1 1 1 5 0 1 1 0 1 6 1 0 0 0 …
98 r  dplyr 

6
dplyrを使用してdata.frame内の完全なケースをフィルタリング(ケースごとの削除)
dplyrを使用して完全なケースのdata.frameをフィルタリングすることは可能ですか?complete.casesもちろん、すべての変数のリストが機能します。ただし、これは、a)変数が多数ある場合は冗長であり、b)変数名が不明な場合(たとえば、data.frameを処理する関数内)は不可能です。 library(dplyr) df = data.frame( x1 = c(1,2,3,NA), x2 = c(1,2,NA,5) ) df %.% filter(complete.cases(x1,x2))
97 r  dplyr  magrittr 

4
dplyr要約:出力で長さがゼロのグループを保持するための「.drop = FALSE」と同等
の関数で使用summariseする場合、空のカテゴリはデフォルトで削除されます。この動作を変更するには、を追加します。ただし、これをで使用する場合は機能しません。結果に空のカテゴリを保持する別の方法はありますか?plyrddply.drop = FALSEsummarisedplyr 以下は、偽のデータの例です。 library(dplyr) df = data.frame(a=rep(1:3,4), b=rep(1:2,6)) # Now add an extra level to df$b that has no corresponding value in df$a df$b = factor(df$b, levels=1:3) # Summarise with plyr, keeping categories with a count of zero plyr::ddply(df, "b", summarise, count_a=length(a), .drop=FALSE) b count_a 1 1 6 2 …
97 r  dplyr  plyr  tidyr 

6
dplyr:「n()のエラー:関数を直接呼び出さないでください」
dplyrパッケージの例の1つを再現しようとしていますが、このエラーメッセージが表示されます。各組み合わせの頻度で生成される新しい列nが表示されることを期待しています。何が欠けていますか?パッケージがロードされていることを3回チェックしました。 library(dplyr) # summarise peels off a single layer of grouping by_vs_am <- group_by(mtcars, vs, am) by_vs <- summarise(by_vs_am, n = n()) n()のエラー:この関数を直接呼び出すことはできません

8
R dplyr:複数の列を削除する
ドロップしたいデータフレームとそのデータフレーム内の列のリストがあります。iris例としてデータセットを使用してみましょう。ドロップSepal.LengthしSepal.Widthて残りの列のみを使用したいと思います。パッケージを使用して、selectまたはパッケージselect_からこれを行うにはどうすればよいdplyrですか? これが私がこれまでに試したことです: drop.cols <- c('Sepal.Length', 'Sepal.Width') iris %>% select(-drop.cols) -drop.colsのエラー:単項演算子の引数が無効です iris %>% select_(.dots = -drop.cols) -drop.colsのエラー:単項演算子の引数が無効です iris %>% select(!drop.cols) !drop.colsのエラー:引数タイプが無効です iris %>% select_(.dots = !drop.cols) !drop.colsのエラー:引数タイプが無効です これらはすでに存在しているはずの非常に便利な操作のように見えるので、私は明白な何かを見逃しているように感じます。Githubで誰かが同様の問題を投稿し、 Hadleyは「負のインデックス作成」を使用すると述べました。それは(私が思うに)私が試みたものですが、無駄です。助言がありますか?
96 r  dplyr 

5
Rパイプ演算子を使用する場合の条件付き評価%>%
パイプ演算子を使用するとき%>%のようなパッケージでdplyr、ggvis、dycharts、など、どのように行うの私は条件付きでステップを実行しますか?例えば; step_1 %>% step_2 %>% if(condition) step_3 これらのアプローチは機能していないようです。 step_1 %>% step_2 if(condition) %>% step_3 step_1 %>% step_2 %>% if(condition) step_3 長い道のりがあります: if(condition) { step_1 %>% step_2 }else{ step_1 %>% step_2 %>% step_3 } すべての冗長性なしでより良い方法はありますか?
93 r  dplyr  ggvis  magrittr 

6
グループごとに上位の値を取得する
これはサンプルデータフレームです。 d <- data.frame( x = runif(90), grp = gl(3, 30) ) の各値のd上位5つの値を持つ行を含むサブセットが必要です。xgrp base-Rを使用すると、私のアプローチは次のようになります。 ordered <- d[order(d$x, decreasing = TRUE), ] splits <- split(ordered, ordered$grp) heads <- lapply(splits, head) do.call(rbind, heads) ## x grp ## 1.19 0.8879631 1 ## 1.4 0.8844818 1 ## 1.12 0.8596197 1 ## 1.26 0.8481809 1 …
92 r  data.table  dplyr 

4
data.tableのdplyr、私は本当にdata.tableを使用していますか?
データテーブルの上でdplyr構文を使用する場合、dplyrの構文を使用しながら、datatableのすべての速度の利点を得ることができますか?言い換えると、dplyr構文でクエリを実行すると、データテーブルを誤用しますか?または、純粋なデータテーブル構文を使用して、そのすべての機能を活用する必要がありますか? アドバイスをよろしくお願いします。コード例: library(data.table) library(dplyr) diamondsDT <- data.table(ggplot2::diamonds) setkey(diamondsDT, cut) diamondsDT %>% filter(cut != "Fair") %>% group_by(cut) %>% summarize(AvgPrice = mean(price), MedianPrice = as.numeric(median(price)), Count = n()) %>% arrange(desc(Count)) 結果: # cut AvgPrice MedianPrice Count # 1 Ideal 3457.542 1810.0 21551 # 2 Premium 4584.258 3185.0 13791 # 3 Very Good …
91 r  data.table  dplyr 

2
dplyrで結合するときにxとyの列の名前を指定するにはどうすればよいですか?
dplyrを使用して結合したい2つのデータフレームがあります。1つは、名を含むデータフレームです。 test_data <- data.frame(first_name = c("john", "bill", "madison", "abby", "zzz"), stringsAsFactors = FALSE) もう1つのデータフレームには、性別を識別するKantrowitz名コーパスのクリーンアップバージョンが含まれています。最小限の例を次に示します。 kantrowitz <- structure(list(name = c("john", "bill", "madison", "abby", "thomas"), gender = c("M", "either", "M", "either", "M")), .Names = c("name", "gender"), row.names = c(NA, 5L), class = c("tbl_df", "tbl", "data.frame")) 基本的に、test_dataテーブルを使用してkantrowitzテーブルから名前の性別を調べたいと思います。私は関数にこの抽象化するつもりですのでencode_gender、私が使用することになるだろう、データセット内の列の名前を知らないだろう、と私はそれがであることを保証することはできませんので、nameのように、kantrowitz$name。 ベースRIでは、次のようにマージを実行します。 merge(test_data, kantrowitz, by.x = "first_names", …
91 r  join  left-join  dplyr 

3
dplyrは条件値で変化します
4列の大きなデータフレーム( "myfile")では、最初の4列に基づいて条件付きで値を持つ5番目の列を追加する必要があります。 主に大規模なデータセットでの速度のために、dplyrとmutateで回答を優先します。 私のデータフレームは次のようになります。 V1 V2 V3 V4 1 1 2 3 5 2 2 4 4 1 3 1 4 1 1 4 4 5 1 3 5 5 5 5 4 ... 5番目の列(V5)の値は、いくつかの条件付きルールに基づいています。 if (V1==1 & V2!=4) { V5 <- 1 } else if (V2==4 & V3!=1) { …
88 r  dplyr  mutate 

12
dplyrは、行のサブセットのいくつかの列を変更/置換します
私は(私が慣れているほとんどのdata.tableを使用するのではなく)dplyrベースのワークフローを試している最中ですが、同等のdplyrソリューションが見つからないという問題に遭遇しました。 。私は通常、単一の条件に基づいて複数の列を条件付きで更新/置換する必要があるシナリオに遭遇します。data.tableソリューションを使用したサンプルコードを次に示します。 library(data.table) # Create some sample data set.seed(1) dt <- data.table(site = sample(1:6, 50, replace=T), space = sample(1:4, 50, replace=T), measure = sample(c('cfl', 'led', 'linear', 'exit'), 50, replace=T), qty = round(runif(50) * 30), qty.exit = 0, delta.watts = sample(10.5:100.5, 50, replace=T), cf = runif(50)) # Replace the values of …
86 r  data.table  dplyr 

4
文字列の一致に基づいて列を選択します-dplyr :: select
たくさんの列を持つデータフレーム(「データ」)があります。一部の列には特定の文字列( "search_string")が含まれています。 dplyr::select()文字列を含む列のみを含むサブセットを取得するにはどうすればよいですか? 私は試した: # columns as boolean vector select(data, grepl("search_string",colnames(data))) # columns as vector of column names names select(data, colnames(data)[grepl("search_string",colnames(data))]) どちらも機能しません。 select()列の代わりに数値ベクトルを受け入れることは知っています。例: select(data,5,7,9:20) しかしID、grepl()式から列の数値ベクトルを取得する方法がわかりません。
83 r  regex  dplyr 

4
dplyrを使用してグループごとに行数をカウントする
mtcarsデータセットを使用しています。特定のデータの組み合わせのレコード数を調べたい。count(*)SQLのgroupby句に非常によく似たもの。plyrddply()から私のために働いています library(plyr) ddply(mtcars, .(cyl,gear),nrow) 出力があります cyl gear V1 1 4 3 1 2 4 4 8 3 4 5 2 4 6 3 2 5 6 4 4 6 6 5 1 7 8 3 12 8 8 5 2 このコードを使用する library(dplyr) g <- group_by(mtcars, cyl, gear) summarise(g, length(gear)) 出力があります …
83 r  dplyr  count  plyr 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.