2013-02-21 33 views
2

我試圖計算每個玩家被允許重新進入遊戲的實驗中獨特玩家的數量。下面是數據是什麼樣子如何計算獨特玩家的數量(允許重複輸入時)?

x <- read.table(header=T, text="group timepast Name NoOfUniquePlayer 
1 0.02703 A 1 
1 0.02827 B 2 
1 0.02874 A 2 
1 0.02875 A 2 
1 0.02875 D 3 
2 0.03255 M 1 
2 0.03417 K 2 
2 0.10029 T 3 
2 0.10394 T 3 
2 0.10605 K 3 
2 0.16522 T 3 
3 0.11938 E 1 
3 0.12607 F 2 
3 0.13858 E 2 
3 0.16084 G 3 
3 0.19830 G 3 
3 0.24563 V 4") 

原始實驗數據包含第3列,第一個是每個實驗的組號(3組在這裏),第二列是歸一化的時間每個球員加盟這個實驗(我把這個專欄從小到大排序),第三個是每個玩家的名字(每個玩家只加入一個單獨的組)。

我想要產生的是最後一列叫做獨特玩家的數量,例如,對於組1,記錄了5名選手(ABAAD),但在那裏只有3名獨特選手(ABD),選手A在選手B出場(第2排)後開始比賽(第1排)並重新加入(第3排),然後選手A再次加入了比賽(第4排因此被記錄),最後球員D進入並完成整個比賽。

任何人都可以幫我弄清楚如何在R中編程來解決這個問題嗎?

+0

因此,你是否試圖重新創建現有的最後一列?或者你是否想要獲得類似組1的成績,而組2有3名獨特的球員,而組3有4名獨特的球員? – A5C1D2H2I1M1N2O1R2T1 2013-02-21 05:36:48

回答

4

我覺得這會給你想要的東西(我認爲這是在你的榜樣2組錯誤)

x$uniquenum <- unlist(
    tapply(
    x$Name, 
    x$group, 
    function(y) 
     cummax(as.numeric(factor(y,levels=y[!duplicated(y)]))) 
    ) 
) 

    group timepast Name NoOfUniquePlayer uniquenum 
1  1 0.02703 A    1   1 
2  1 0.02827 B    2   2 
3  1 0.02874 A    2   2 
4  1 0.02875 A    2   2 
5  1 0.02875 D    3   3 
6  2 0.03255 M    1   1 
7  2 0.03417 K    2   2 
8  2 0.10029 T    3   3 
9  2 0.10394 T    3   3 
10  2 0.10605 K    4   3 
11  2 0.16522 T    4   3 
12  3 0.11938 E    1   1 
13  3 0.12607 F    2   2 
14  3 0.13858 E    2   2 
15  3 0.16084 G    3   3 
16  3 0.19830 G    3   3 
17  3 0.24563 V    4   4 
+0

aweeeeeeeeeeeeeesome! – user001 2013-02-22 04:36:58

2

稍微更緊湊,使用data.table

DT <- data.table(x) 


DT[, uniqueNum := cummax(match(Name,unique(Name))), by = group] 

如果你想要的唯一球員總數然後

DT[, totalUnique := max(uniqueNum), by = group] 
+0

aweeeeeesome以及,都是完美的答案! – user001 2013-02-22 04:41:49

+0

@Stat - 記得在這種情況下將其中一個標記爲答案。 mnel不需要點,暗示提示。 ;-) – thelatemail 2013-02-22 05:00:30

+0

..... – mnel 2013-02-22 05:07:46