按值和顺序比较向量

时间:2012-08-08 01:43:47

标签: r vector comparison

我以角色向量的形式提取了一些棒球击球阵容 e.g

[1] "Yunel Escobar"     "Kelly Johnson"     "Jose Bautista"     "Adam Lind"        
[5] "Edwin Encarnacion" "Brett Lawrie"      "Eric Thames"       "Colby Rasmus"     
[9] "Jeff Mathis"

并在R中创建了一个数据帧allLineups,列出了162场比赛中每场比赛的击球顺序

头(allLineups)

player          order game
 Yunel Escobar     1    1
 Kelly Johnson     2    1
 Jose Bautista     3    1
 Adam Lind         4    1
 Edwin Encarnacion 5    1
 Brett Lawrie      6    1

我现在想做一些包括以下

的分析

a)在赛季中,击球阵容中任何特定的9名球员的频率

b)完全相同的阵容(包含顺序)发生了多少次

c)两个指定球员多久出现在一起

d)对于任何指定的游戏,它的阵容与第一场比赛的阵容相比如何

我很欣赏有关如何处理这些查询的一些指导

1 个答案:

答案 0 :(得分:2)

在下面的评论中添加sort次来提供OP请求的内容;

player <- c("Yunel Escobar"  ,   "Kelly Johnson"  ,   "Jose Bautista"   ,  "Adam Lind"   ,     
"Edwin Encarnacion", "Brett Lawrie"   ,   "Eric Thames"   ,    "Colby Rasmus"    , 
"Jeff Mathis")

# create two games with different lineups
allLineups <- data.frame(player=c(player, rev(player)) , order=1:9, game=rep(1:2, each=9))

#construct a lineup
with(allLineups, tapply(player, game, function(x) paste0(sort(x), collapse="/") ) )

# tabulate the values for lineups
table( with(allLineups, tapply(player, game, function(x) paste0(sort(x), collapse="/") ) ) )

您可以通过以下方式缩短阵容列表:

allLineups$shortplyr <- sub("^(.).+\\ (.{4}).*$", '\\1_\\2', allLineups$player)
# ------------
table( with(allLineups, tapply(shortplyr, game, function(x) paste0(sort(x), collapse="/") ) ) )

A_Lind/B_Lawr/C_Rasm/E_Enca/E_Tham/J_Baut/J_Math/K_John/Y_Esco 
                                                             2 

OP清楚地不想要这个。:

如果没有订购阵容,你应该用:

排序
allLineups <- with( allLinups, allLineups[ order(game, order) , ]