计算r

时间:2018-03-05 03:39:05

标签: r aggregate

我想用值Z来计算元素的数量。

我将举例说明我需要的东西。

我有大量的标签(数百万)存储在数据框中,它们的格式为< X>。

如下图所示。我需要获取每个标签的数量以找到前10个标签(最常提到的标签)。

示例:

enter image description here

我需要的输出是:

enter image description here

注意:我是R的初学者,所以我需要最简单的方法。

我的尝试:我尝试了函数表(),但看起来它适用于数字。 我尝试了group_by(),但我没有得到想要的结果。 数据集样本:

DF <- data.frame(Tag=c("<C++><Java>","<java><python><javascript>","<java><C++>","<Json><PHP>","<PHP><Java>"))

                         Tag
1                <C++><Java>
2 <java><python><javascript>
3                <java><C++>
4                <Json><PHP>
5                <PHP><Java>

3 个答案:

答案 0 :(得分:2)

使用stringidplyrtidytext包,您可以执行以下操作。您可以使用stri_extract_all_regex()提取计算机语言名称并拆分每个字符串并使用unnest_tokens()创建数据框。然后,计算每种语言出现在数据集中的次数。

DF %>%
unnest_tokens(input = Tag, output = language, token = stri_extract_all_regex,
              pattern = "(?<=\\<)[^<>]*(?=\\>)", to_lower = TRUE) %>%
count(language, sort = TRUE)

  language       n
  <chr>      <int>
1 java           4
2 c++            2
3 php            2
4 javascript     1
5 json           1
6 python         1

答案 1 :(得分:1)

这是基础R的解决方案;在我看来,在这种情况下不需要额外的库。

table(unlist(strsplit(gsub("(^<|>$)", "", DF$Tag), "><")));
#       C++       java       Java javascript       Json        PHP     python
#         2          2          2          1          1          2          1

或者如果您想忽略大小写,您可以将所有标记转换为小写:

table(tolower(unlist(strsplit(gsub("(^<|>$)", "", DF$Tag), "><"))));
#       c++       java javascript       json        php     python
#         2          4          1          1          2          1

作为data.frame

as.data.frame(table(tolower(unlist(strsplit(gsub("(^<|>$)", "", DF$Tag), "><")))))
#        Var1 Freq
#1        c++    2
#2       java    4
#3 javascript    1
#4       json    1
#5        php    2
#6     python    1

说明:分别从开头和结尾删除"<"">"; strsplit"><",并使用table计算出现次数。

答案 2 :(得分:1)

library(tidyverse)
library(tidytext)
DF%>%mutate(Freq=1)%>%
     unnest_tokens(Tag,Tag,"regex",pattern="<|>|\\n")%>%group_by(Tag)%>%
     summarise(count=n())%>%arrange(desc(count))
# A tibble: 6 x 2
         Tag count
       <chr> <int>
1       java     4
2        c++     2
3        php     2
4 javascript     1
5       json     1
6     python     1

在基础R中执行此操作: 您需要split,然后trim空格和表格,并按降序排序

sort(table(trimws(unlist(strsplit(gsub("<(.*?)>(R?)","\\U\\1 ",DF$Tag,perl = T)," ")))),T)

      JAVA        C++        PHP JAVASCRIPT       JSON     PYTHON 
         4          2          2          1          1          1