我想用值Z计算元素的数量。
我将举例说明我的需求。
我有大量的标签(数百万)存储在数据框中,它们的格式为<X>。
如下图所示。我需要获取每个标签的计数以找到前10个标签(最常提到的标签)。
这个例子 :
我需要的输出是:
注意:我是初学者,所以我需要最简单的方法。
我的尝试:我尝试了函数表(),但看起来它适用于数字。我尝试了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的解决方案;在我看来,在这种情况下不需要加载额外的库。
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
来计算事件的数量。
使用stringi
,dplyr
和tidytext
包,您可以执行以下操作。您可以使用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
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