在r中的数据帧中计算具有值Z的元素的数量

问题描述 投票:0回答:3

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

我将举例说明我的需求。

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

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

这个例子 :

enter image description here

我需要的输出是:

enter image description here

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

我的尝试:我尝试了函数表(),但看起来它适用于数字。我尝试了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>
r aggregate
3个回答
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
投票

使用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
投票
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 
© www.soinside.com 2019 - 2024. All rights reserved.