3

実際の値のエントリを持つ 2 つの列 (列 A と列 B など) を持つ csv ファイルを R にロードしたとします。データフレーム df を呼び出します。次のコードを高速化する方法はありますか:

dfm <- df[floor(A) = x & floor(B) = y,]
x <- 2
y <- 2
dfm

機能に似たものがあることを願っています。

dfm <- function(x,y) {df[floor(A) = x & floor(B) = y,]}

入力できるように

どんな助けでも大歓迎です。

4

1 に答える 1

3

現在書かれている方法は、いくつかの理由で機能しません。

  1. を割り当てる前にx、に値を割り当てる必要があります。言い換えれば、行と行の前に来る必要があります。ydfmx <- 2y <- 2dfm <- ...
  2. Rそれらを含むデータフレームの角かっこ内にそれらを入れても、は何Aであるかを知りません。Bあなたは書く必要がdf$Aありdf$Bます。
  3. =は代入演算子ですが、論理演算子を探しています==。現在、コードは「値xを割り当てます」と言っていますfloor(A)(これは実際には意味がありません)。floor(A)「 xに等しい行のみを選択する」またはfloor(A)==x

だからあなたが欲しいのは:

dfm.create <- function(x,y) {df[floor(df$A)==x & floor(df$B)==y,]}
dfm <- dfm.create(2,2)

dfmデータフレームを呼び出す場合は、関数に名前を付けたくないことに注意してください。そうしないとdfm、データフレームを作成するために関数を消去する必要があります。

于 2012-12-03T14:53:46.623 に答える