我有一个名为nameIwant
的列表,其值为a, b, c
。
一个看起来像这样的数据框:
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和name.3元素匹配nameIwant元素的正数,中性和负数的百分比。
因此,举例来说,我会发现a
有2 + 1(来自value.1
的2个,value.2
中的1个)正值和1个负值,b
1正面和1 + 1负面和一个中立,c
有1个中性和1个负面我不会处理xy和d。
我尝试将name.1&value.1
,name.2&value.1
和name.3&value.1
列转换为表格,其中名称与nameIwant
匹配,但我无法加入3个不同的表格,我最后得到了三个表,第一个有11个名字,并且计算了所有三个情绪,第二个有5个名字,没有被包括在第一个表中,还有一些是,并且只有负面和正面情绪的情绪分数,我想要做的是加入这些表,所以所有的名字都在那里,对于多个表中的名字,我想加上情绪分数,但我无法弄清楚如何去做。
如果我可以用value.1
做到这一点,那么我会对value.2
做同样的事情,然后将这两个表合并成一个表,告诉我有多少负数,根据{{1}}和nameIwants
,这些value.1
总共有正面和中立的投票。
答案 0 :(得分: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
现在你可以使用R机器了:
> 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