如何计算和比较R中多列的数据?

时间:2018-08-14 14:13:04

标签: r count frequency

我正在使用一个数据框,其中包含已分类和编码的文本数据。从1到12的每个数值代表一种单词。

我想计算6列(pre1到pre6)中每个数字(1到12)的出现频率,因此我知道使用了多少种单词。有人可以建议如何做吗?

我的df的结构如下:

enter image description here

3 个答案:

答案 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的值将为pre1pre2等,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。对于该问题,显然没有必要导入dplyrtidyverse,但是我想,无论何时,只要使用R的作者都会打开这些包,因此,这实际上并没有增加任何成本。他们。 data.tablesqldf是其他基于良好答案的出色软件包。这些是很好的程序包,许多人做很多事情,可以在其中一个程序包的基础R中完成。这些软件包有望变得更加清晰或更快,或者重用您可能已经拥有的可能知识。这没什么不对的。但是,我以您的问题为标志,您仍在学习R,并且建议您先学习R,然后再通过学习特殊的软件包和DSL分散注意力。

人们使用R为基础已有几十年了,他们将继续这样做。 R的学习基础不会分散您对R的注意力,数十年来,这些知识将继续是值得的。如果可以对tidyverse或datatable说同样的话,那么时间就会证明一切(尽管sqldf可能也是未来的坚实投资,也许比R还要重要)。