2013-06-12 22 views
0

我有一個名爲nameIwant的列表,其值爲a, b, cR:查找和計數[表合併和求和]

而且看起來像這樣一個數據幀:

value.1  name.1  name.2  name.3  value.2 
    positive  a   b   NA   negative 
    negative  x   b   d   neutral 
    positive  a   y   NA   positive 
    neutral  c   NA   NA   negative 

而我希望做的是找到的正面,中性和負面計數每個name.1,name.2和名稱的百分比.3與nameIwant元素匹配的元素。

因此,例如我會發現a具有2 + 1(2從value.1和1從value.2)正值和1負值,b具有1陽性和1 + 1負和一箇中性,c具有1中性和1負我不會與xy和d打交道。

我試圖把name.1&value.1name.2&value.1name.3&value.1列成表,其​​中名稱匹配nameIwant,但我無法參加3個不同的表,我結束了三個表格,第一個有11個nameIwants和計數對於所有這三種情緒,第二種情況下有5個名稱未包含在第一個表中,其中有一些是隻有負面和積極情緒的情緒分數,我想做的是加入這些表,因此所有的名字都是在那裏,對於那些在不止一張桌子上的名字,我想加上情感分數,但我不知道如何去做。

而且如果我能做到這一點與value.1,然後我會做與value.2相同,然後合併這兩個表,告訴我有多少負面的,積極的和中性票這些nameIwants有一個表來結束總計根據value.1value.2。如果你創建了一個體面的數據幀

回答

1

生活將得到更容易,用鑰匙列和值列:

dat <- read.table(header=TRUE, text=" 
value.1  name.1  name.2  name.3  value.2 
    positive  a   b   NA   negative 
    negative  x   b   d   neutral 
    positive  a   y   NA   positive 
    neutral  c   NA   NA   negative 
", stringsAsFactors=FALSE) 

x <- with(dat, data.frame(name=c(name.1, name.2, name.3), value=c(rep(value.1, 3), rep(value.2, 3)), stringsAsFactors=FALSE)) 

結果:

> x 
    name value 
1  a positive 
2  x negative 
3  a positive 
4  c neutral 
5  b positive 
6  b negative 
7  y positive 
8 <NA> neutral 
9 <NA> positive 
10 d negative 
11 <NA> positive 
12 <NA> neutral 
13 a negative 
14 x neutral 
15 a positive 
16 c negative 
17 b negative 
18 b neutral 
19 y positive 
20 <NA> negative 
21 <NA> negative 
22 d neutral 
23 <NA> positive 
24 <NA> negative 

現在均可以使用機械:

> table(x) 
    value 
name negative neutral positive 
    a  1  0  3 
    b  2  1  1 
    c  1  1  0 
    d  1  1  0 
    x  1  1  0 
    y  0  0  2 

如果您不喜歡錶中的某些名稱,只需放棄它們即可。要過濾表對象,我建議這一招:

tab <- as.data.frame(unclass(table(x))) 

過濾:

> tab[row.names(tab) %in% c("a", "b", "c"), ] 
    negative neutral positive 
a  1  0  3 
b  2  1  1 
c  1  1  0 
+0

謝謝你,它的工作完美! – dira