0

私はRプログラミングの初心者です(データ分析に使用しています)

以下のデータがあります。(トリミング版)

state   storeid sales
CA  1   40,000  
CA  2   44,000  
CA  3   38000   
MN  1   26000   
MN  2   25500   

上位/下位の店舗を返す関数が必要です。

次の関数を書きました。

storeinfo<-function(num="top") {

  df<-read.csv("store.csv")

  bestVal <- 1;
  if (!missing(num)) {
    if(is.numeric(num)){
      bestVal =  as.numeric(num);
    }
    if(num=="top"){
      bestVal <-1
    }
    if ( num=="poor"){
      bestVal<-0
    }
  }
  print(bestVal)
    data2<-subset(df[,c(1,2,3)])
    data2<-data2[order(as.numeric( data2$sales), data2$storeid,na.last=TRUE,decreasing=TRUE), ]
    idx<-tapply(1:NROW(data2),data2$state,"[",bestVal)
    idx1<-tapply(1:NROW(data2),data2$state,"[",1)

    return (data.frame(data2[idx1,1],data2[idx,2:3]))

}

上記の関数を実行すると、次のように表示されます

> head(storeinfo(1))
[1] 1
  data2.idx1..1. storeid  sales
2             CA       2 44,000
4             MN       1  26000

a) 最初の列 2,4 などを抑制する方法 (インデックス) b) 売上が低い店舗を見つける方法は? c) 返されたデータ フレームに異なる列名を設定する方法。

4

1 に答える 1

0

これを行う

min_max_sales = c(which.min(df$sales), which.max(df$sales)) # return row numbers
df[min_max_sales,]

アップデート。

データフレームを並べ替えて、売上がn番目に多いストアを取得する必要がある場合は、plyrパッケージを使用したより良いアプローチがあります。

plyr::arrange(df, sales)[n,]
于 2013-01-21T17:31:11.003 に答える