我正在使用一个数据框,其中包含已分类和编码的文本数据。从1到12的每个数值代表一种单词。
我想计算6列(pre1到pre6)中每个数字(1到12)的出现频率,因此我知道使用了多少种单词。有人可以建议如何做吗?
我的df的结构如下:
答案 0 :(得分:0)
类似的东西对您有用吗?
library(dplyr)
df <- data.frame(pre1 = c(sample(1:12, 10)),
pre2 = c(sample(1:12, 10)),
pre3 = c(sample(1:12, 10)),
pre4 = c(sample(1:12, 10)),
pre5 = c(sample(1:12, 10)),
pre6 = c(sample(1:12, 10)))
count <- count(df, pre1, pre2, pre3, pre4, pre5, pre6)
答案 1 :(得分:0)
一个解决方案是这样:
library(tidyverse)
mtcars %>%
select(cyl, am, gear) %>% # select the columns of interest
gather(column, number) %>% # reshape
count(column, number) # get counts of numbers for each column
# # A tibble: 8 x 3
# column number n
# <chr> <dbl> <int>
# 1 am 0 19
# 2 am 1 13
# 3 cyl 4 11
# 4 cyl 6 7
# 5 cyl 8 14
# 6 gear 3 15
# 7 gear 4 12
# 8 gear 5 5
在您的情况下,column
的值将为pre1
,pre2
等,number' will get values 1 - 12 and
n`将是特定列上特定数字的计数。
答案 2 :(得分:0)
从这个问题尚不清楚,您是否想要所有这些列一起使用频率表,还是要分别为每个列使用频率表。在可能的其他问题中,您还应该弄清楚这些数字是编码为数字,字符还是因数(str(pCat)
的结果是实现此目的的一种好方法)。对于这个特定的问题,幸运的是没关系。
我已经在评论中给出的答案是
table(unlist(pCat[,4:9]))
和
table(pCat$pre3)
作为后者的扩展,我还要指出ANG的评论,其内容可以归结为
lapply(pCat[,4:9], table)
这些是简单的解决方案,使用基础R
,没有任何其他不必要的软件包。 JonGrub和AntoniosK的答案基于tidyverse。对于该问题,显然没有必要导入dplyr
或tidyverse
,但是我想,无论何时,只要使用R
的作者都会打开这些包,因此,这实际上并没有增加任何成本。他们。 data.table
和sqldf
是其他基于良好答案的出色软件包。这些是很好的程序包,许多人做很多事情,可以在其中一个程序包的基础R
中完成。这些软件包有望变得更加清晰或更快,或者重用您可能已经拥有的可能知识。这没什么不对的。但是,我以您的问题为标志,您仍在学习R
,并且建议您先学习R
,然后再通过学习特殊的软件包和DSL分散注意力。
人们使用R
为基础已有几十年了,他们将继续这样做。 R
的学习基础不会分散您对R
的注意力,数十年来,这些知识将继续是值得的。如果可以对tidyverse或datatable说同样的话,那么时间就会证明一切(尽管sqldf
可能也是未来的坚实投资,也许比R
还要重要)。