1

カスタム関数で呼び出すと、集計の関数が奇妙な動作をするという奇妙な問題が発生しました。サブセット関数を完全に支配しているようです:

問題の概要を説明するために、2 つの部分に分けて説明します。1. カスタム機能なし

    c<- data.frame(A = c("carr","bike","truck","carr","truck","bike","bike","carr","truck","carr","truck","truck","carr","truck","truck"),
                B = c(10,20,30,23,45,56,78,44,10,20,30,10,20,30,67),
                D = c(1,2,3,1,2,3,2,3,2,3,2,2,3,2,1))

c_subset<- subset(c,(A=="carr")|(A=="bike"))

dg<- aggregate(B ~ D + A  ,c_subset,max)

dg の値は次のとおりです。

D   A   B           
2   bike    78
3   bike    56
1   carr    23
3   carr    44

これはまさにあるべき姿です。

しかし2.カスタム機能を使用する場合:

 rtk <- function(datam,inc_coll,inc_vall,lb,ld){
  datam_subset <- subset(c,inc_coll %in% inc_vall)
  dg1<- aggregate(lb ~ ld + inc_coll,datam_subset,max)

  return(dg1)
}

c_ans <- rtk(c,c$A,c("carr","bike"),c$B,c$D)

答えは次のとおりです。

ld  inc_coll    lb

2   bike    78
3   bike    56
1   carr    23
3   carr    44
1   truck   67
2   truck   45
3   truck   30

集計関数で「トラック」を取得する理由を知りたいですか? 集計関数では、サブセットであり、「carr」と「bike」のデータのみを含むデータ datam_subset を使用しました。

私は非常に基本的なものを見逃しているかもしれません。あなたの助けに感謝します。ありがとう

4

3 に答える 3

0

列名を関数に渡すことは、直感に反する可能性があるため、よく尋ねられる質問です。次の質問を確認してください: data.frame 列名を関数 に渡す関数を作成するより良い方法は、列自体ではなく列名を rtk に渡し、それらを目的に使用することです。

rtk <- function(datam,inc_coll,inc_vall,lb,ld){
## Access the column using df[[colname]] to do the subset
  datam_subset <- subset(c,c[[inc_coll]] %in% inc_vall);
## Define the formula you will use in the aggregate function
f=as.formula(paste0(lb,"~",ld,"+", inc_coll))
## Perform the aggregation
  dg1<- aggregate(f,datam_subset,max);
  return(dg1)
}

次に、列名を使用して適切に呼び出します。

c_ans <- rtk(c,"A",c("carr","bike"),"B","D")

これにより、次のことが得られます。

D    A  B
1 2 bike 78
2 3 bike 56
3 1 carr 23
4 3 carr 44
于 2017-05-14T22:16:21.467 に答える