更新:dplyrは、この質問が尋ねられてから更新されており、OPが望むように動作するようになりました
dplyr
を使用して、data.frame
の2行目から7行目を取得しようとしています。
私はこれをやっています:
require(dplyr)
df <- data.frame(id = 1:10, var = runif(10))
df <- df %>% filter(row_number() <= 7, row_number() >= 2)
しかし、これはエラーをスローします。
Error in rank(x, ties.method = "first") :
argument "x" is missing, with no default
私は簡単に作ることができることを知っています:
df <- df %>% mutate(rn = row_number()) %>% filter(rn <= 7, rn >= 2)
しかし、私の最初の試みがうまくいかない理由を理解したいと思います。
実際、dplyrのslice
関数は、この種のサブセット用に作成されています。
df %>% slice(2:7)
(私はパーティーに少し遅れていますが、将来の読者のためにこれを追加すると思いました)
row_number()
関数は、各要素の行番号を単に返すだけではないため、希望どおりに使用することはできません。
•「row_number」:「rank(ties.method = "first")」と同等
_row_number
_が欲しいものを実際に言っているわけではありません。あなたの場合:
_df %>% filter(row_number(id) <= 7, row_number(id) >= 2)
_
id
がソートされているため、row_number(id)
が_1:10
_であるため機能します。このコンテキストでrow_number()
がどのように評価されるかわかりませんが、2回目に呼び出されたときにdplyr
がそれをフィードするために使い果たされ、あなたは同等のものを取得します:
_> row_number()
Error in rank(x, ties.method = "first") :
argument "x" is missing, with no default
_
それはあなたのエラーです。
とにかく、それはnot行を選択する方法です。
単に_df[2:7,]
_に添字を付ける必要があります。または、どこでもパイプを使用する場合:
_> df %>% "["(.,2:7,)
id var
2 2 0.52352994
3 3 0.02994982
4 4 0.90074801
5 5 0.68935493
6 6 0.57012344
7 7 0.01489950
_
パイプラインで行番号ベースのフィルタリングを行う別の方法を次に示します。
df <- data.frame(id = 1:10, var = runif(10))
df %>% .[2:7,]
> id var
2 2 0.28817
3 3 0.56672
4 4 0.96610
5 5 0.74772
6 6 0.75091
7 7 0.05165