我有一大堆数据保存在一个长列表中。这是前六个记录的示例:
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
那么如何计算每个术语出现的记录数,即分母和比率本身?
非常感谢您的考虑!