如何用R统计一列中的多个因子?
原始数据如下:wl.csv,每一行是一篇论文,每个论文有1~3个关键词,要统计每个关键词的词频。
1 keywords <- wltext$E关键词
2 keywords <- as.character(keywords)
3 list_ke <- strsplit(keywords,";")
4 table(unlist(list_ke))
这是我的做法,有个地方不明白,list_ke是list的形式,使用table函数为什么要用unlist
这个函数?这个问题,还能有更好的解决方式吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是这样的,table只能对类似
vector
(包括vector
,matrix
,list
)变量起作用。一维的情形
在一维情况下很容易理解;
就是将a里的因子变量计数,输出成一个一维的
vector
。二维的情形
在二维以上的情形是比较复杂的。
在为
matrix
时,是对matrix向量化后,转为vector
解。在为
data.frame
时,实际是是对于两个变量的笛卡尔积做table
,比如上面的例子,其实是对于('a', 'c'), ('a', 'c'), ('b', 'd'), ('b', 'e')这四个变量做
table
,结果输出为matrix
形式(类似于数据分析中的透视表)。我们再来看list的例子
上面例子可以看出,对list操作其实就是对list中每个元素进行笛卡尔积后,做
table
,输出为矩阵,和对data.frame
的操作类似。回过头来看题主的问题
题主在
strsplit
后实际得出的是一个list
,和上面二维情况下的list
例子一样,所以很容易理解,这不是题主所要的东西,因为:如果
list
中元素长度不一致,无法做出笛卡尔积,此时,会报错;如果长度一致,做出笛卡尔积,得出的是笛卡尔积的计数,而不是题主想要的每个词语的计数。
比如:
它实际上是对((关键词1, 关键词2),(关键词1, 关键词2))做
table
,而不是对(关键词1, 关键词2,关键词1, 关键词2)做
table
因此,要
unlist
哦!