2

リストに整理したいデータセットがありますが、最も効率的な方法がわかりません。これは、営業担当者と販売された製品のリストです。

  rowId       repNum       prodNum
   001         12006        335506883
   002         12008        152348345
   003         12055        993047386
   004         12006        294726636
   005         12069        110847537
   006         12006        335506883
   007         12006        152348345
   ...           ...           ...

各要素に担当者が販売したアイテムのベクトルが含まれるリストを作成したいと思います。最初のアイデアは使用することtapplyでしたが、それにはネットする関数が必要です。他の提案はありますか?

4

3 に答える 3

7

あなたdata.frameが呼び出された場合dataset

split(dataset, dataset$repNum)

それぞれのコンポーネントを含むリストを作成しますrepNum


> split(dataset, dataset$repNum)
$`12006`
  rowId repNum   prodNum
1     1  12006 335506883
4     4  12006 294726636
6     6  12006 335506883
7     7  12006 152348345

$`12008`
  rowId repNum   prodNum
2     2  12008 152348345

$`12055`
  rowId repNum   prodNum
3     3  12055 993047386

$`12069`
  rowId repNum   prodNum
5     5  12069 110847537

mrdwabで指摘されているようprodNumに、次のように分割することで、「担当者が販売したアイテムのベクター」を取得できます。

> split(dataset$prodNum, dataset$repNum)
$`12006`
[1] 335506883 294726636 335506883 152348345

$`12008`
[1] 152348345

$`12055`
[1] 993047386

$`12069`
[1] 110847537
于 2012-09-24T16:14:40.680 に答える
4

を使用するtapply()と、次のように実行できます。

with(dataset, tapply(prodNum, repNum, FUN=function(X) X))
# $`12006`
# [1] 335506883 294726636 335506883 152348345
# 
# $`12008`
# [1] 152348345
# 
# $`12055`
# [1] 993047386
# 
# $`12069`
# [1] 110847537
于 2012-09-24T16:23:18.943 に答える
0

plyr から dlply を使用することもできます。

require(plyr) ## install.packages("plyr") if you haven't already
dlply(dataset,"repNum",function(x) return(x$prodNum))
#$`12006`
#[1] 335506883 294726636 335506883 152348345
#
#$`12008`
#[1] 152348345
#
#$`12055`
#[1] 993047386
#
#$`12069`
#[1] 110847537
于 2012-09-24T18:34:27.677 に答える