首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逐行计数最频繁的单词

逐行计数最频繁的单词
EN

Stack Overflow用户
提问于 2016-09-02 19:52:39
回答 2查看 1.3K关注 0票数 2

下面有一张表

代码语言:javascript
复制
   Name     Mon    Tue     Wed    Thu     Fri    Sat    Sun

1 John     Apple  Orange  Apple  Banana  Apple  Apple  Orange
2 Ricky    Banana Apple   Banana Banana  Banana Banana Apple
3 Alex     Apple  Orange  Orange Apple   Apple  Orange Orange
4 Robbin   Apple  Apple   Apple  Apple   Apple  Banana Banana
5 Sunny    Banana Banana  Apple  Apple   Apple  Banana Banana

因此,我想为每个人计算最常见的水果,并在新列中添加这些值。

例如。

代码语言:javascript
复制
   Name     Mon    Tue     Wed    Thu     Fri    Sat    Sun      Max_Acc  Count

1 John     Apple  Orange  Apple  Banana  Apple  Apple  Orange     Apple       4
2 Ricky    Banana Apple   Banana Banana  Banana Banana Apple      Banana      5
3 Alex     Apple  Orange  Orange Apple   Apple  Orange Orange     Orange      4
4 Robbin   Apple  Apple   Apple  Apple   Apple  Banana Banana     Apple       5
5 Sunny    Banana Banana  Apple  Apple   Apple  Banana Banana     Banana      4

我在找麻烦的时候遇到了问题。利用table()函数可以在列中找到频率。

代码语言:javascript
复制
>table(df$Mon)

 Apple  Banana
  3      2

但在这里,我想在新的专栏中列出最常见的水果的名字。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-03 04:03:54

如果需要与max“计数”对应的“计数”和“名称”,则循环遍历数据集的行(使用applyMARGIN = 1),使用table获取频率,从中提取最大值和对应于最大值的names,用原始数据集对其进行rbindcbind

代码语言:javascript
复制
cbind(df1, do.call(rbind, apply(df1[-1], 1, function(x) {
              x1 <- table(x)
             data.frame(Count = max(x1), Names=names(x1)[which.max(x1)])})))

#    Name    Mon    Tue    Wed    Thu    Fri    Sat    Sun Count  Names
#1   John  Apple Orange  Apple Banana  Apple  Apple Orange     4  Apple
#2  Ricky Banana  Apple Banana Banana Banana Banana  Apple     5 Banana
#3   Alex  Apple Orange Orange  Apple  Apple Orange Orange     4 Orange
#4 Robbin  Apple  Apple  Apple  Apple  Apple Banana Banana     5  Apple
#5  Sunny Banana Banana  Apple  Apple  Apple Banana Banana     4 Banana

或者我们可以使用data.table

代码语言:javascript
复制
library(data.table)
setDT(df1)[, c("Names", "Count") := {tbl <- table(unlist(.SD))
                    .(names(tbl)[which.max(tbl)], max(tbl))}, by = Name]
票数 2
EN

Stack Overflow用户

发布于 2016-09-03 07:35:43

另一种方法是遍历所有唯一的水果,如下所示

代码语言:javascript
复制
fruits_unique <- unique(unlist(dat[-1]))
occurence <- sapply(fruits_unique, function(x) rowSums(dat[,-1] == x)) 
# Using this data to create the resulting columns
ind <- apply(occurence,1,which.max)
dat$Names <- fruits_unique[ind]
dat$count <- occurence[cbind(seq_along(ind), ind)]

结果:

代码语言:javascript
复制
    Name    Mon    Tue    Wed    Thu    Fri    Sat    Sun  Names Count
1   John  Apple Orange  Apple Banana  Apple  Apple Orange  Apple     4
2  Ricky Banana  Apple Banana Banana Banana Banana  Apple Banana     5
3   Alex  Apple Orange Orange  Apple  Apple Orange Orange Orange     4
4 Robbin  Apple  Apple  Apple  Apple  Apple Banana Banana  Apple     5
5  Sunny Banana Banana  Apple  Apple  Apple Banana Banana Banana     4
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39299811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档