2012-09-18 183 views
0

我有一大組數據保存在一個長列表中。這是第一個六個記錄一個例子:計算R中的頻率和項數的比率?

A <- list(c("JAMES","CHARLES","JAMES","RICHARD"), 
c("JOHN","ROBERT","CHARLES"), 
c("CHARLES","WILLIAM","CHARLES","MICHAEL","WILLIAM","DAVID","CHARLES","WILLIAM"), 
c("CHARLES"), 
c("CHARLES","CHARLES"), 
c("MATTHEW","CHARLES","JACK")) 

我想計算與每個唯一術語中的每個記錄,每個術語出現在記錄的數量發生的相對頻率的總和的比率。

我計算的分子,即與每個獨特的項發生在每一個記錄,這樣的相對頻率的總和:

> B <- lapply(A, function(x)table(x)/length(x)) 
> aggregate(unlist(B), list(names(unlist(B))), FUN=sum) 
Group.1   x 
1 CHARLES 3.2916667 
2 DAVID 0.1250000 
3  JACK 0.3333333 
4 JAMES 0.5000000 
5  JOHN 0.3333333 
6 MATTHEW 0.3333333 
7 MICHAEL 0.1250000 
8 RICHARD 0.2500000 
9 ROBERT 0.3333333 
10 WILLIAM 0.3750000 

我不知道如何計算分母,即數每個詞出現在記錄中,正確儘管如此。我只知道如何計算數據集合中出現的每個學期數:

> table(unlist(A)) 

CHARLES DAVID JACK JAMES JOHN MATTHEW MICHAEL RICHARD ROBERT WILLIAM 
    9  1  1  2  1  1  1  1  1  3 

但多次出現的一些術語記錄中,我想,爲了得到這樣的結果,省略這些重複:

CHARLES DAVID JACK JAMES JOHN MATTHEW MICHAEL RICHARD ROBERT WILLIAM 
    6  1  1  1  1  1  1  1  1  1 

這怎麼能實現?
根據我的例子,我想獲得一個類似的最終輸出:

Group.1   x 
1 CHARLES 0.5486111 
2 DAVID 0.1250000 
3  JACK 0.3333333 
4 JAMES 0.5000000 
5  JOHN 0.3333333 
6 MATTHEW 0.3333333 
7 MICHAEL 0.1250000 
8 RICHARD 0.2500000 
9 ROBERT 0.3333333 
10 WILLIAM 0.3750000 

所以,我怎麼能計算出每個詞出現在記錄的數量,即分母,和比自己?

非常感謝您提前考慮!

回答

1

當聚集,而不是sum,只需使用mean

aggregate(unlist(B), list(names(unlist(B))), FUN=mean) 
# Group.1   x 
# 1 CHARLES 0.5486111 
# 2 DAVID 0.1250000 
# 3  JACK 0.3333333 
# 4 JAMES 0.5000000 
# 5  JOHN 0.3333333 
# 6 MATTHEW 0.3333333 
# 7 MICHAEL 0.1250000 
# 8 RICHARD 0.2500000 
# 9 ROBERT 0.3333333 
# 10 WILLIAM 0.3750000 
+0

這正是我一直在尋找!非常感謝你! – user0815

0
B <- lapply(A, unique) 
B 
table(unlist(B)) 

CHARLES DAVID JACK JAMES JOHN MATTHEW MICHAEL RICHARD ROBERT WILLIAM 
     6  1  1  1  1  1  1  1  1  1 

從早期的崗位(其中你真的應該引用user0815)。堅持獨特的表格呼叫。

BL <- lapply(A, function(x)table(unique(x))/length(x)) 
## turn list into a vector 
B <- unlist(BL) 

aggregate(B, list(names(B)), FUN=sum) 
#------------ 
    Group.1   x 
1 CHARLES 2.5416667 
2 DAVID 0.1250000 
3  JACK 0.3333333 
4 JAMES 0.2500000 
5  JOHN 0.3333333 
6 MATTHEW 0.3333333 
7 MICHAEL 0.1250000 
8 RICHARD 0.2500000 
9 ROBERT 0.3333333 
10 WILLIAM 0.1250000 
+0

然後,(希望不是說明明顯的OP)假設的'輸出aggregate'被稱爲'out', 'out $ rel < - out $ x/table(unlist(B))' – A5C1D2H2I1M1N2O1R2T1

+0

是的,我是「充滿希望的」。我在他的A或B上運行他的aggregate()調用時出現錯誤。 –

+0

此問題是[This one]的精確副本(http://stackoverflow.com/questions/11546941/calculate-relative-frequency-of -list-terms-and-its-sum-in-r)只有一個加法('unique'),但是OP忘記在他們的問題中包含這個。 – A5C1D2H2I1M1N2O1R2T1