Count most frequent word in row by R
<p>There is a table shown below </p>

<pre><code>   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
</code></pre>

<p>So , I want to count the most frequent Fruit for each person and add those value in new column.   </p>

<p>For example.</p>

<pre><code>   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
</code></pre>

<p>I am facing problem in finding rows. I can find Frequency in column by using <code>table()</code> function.</p>

<pre><code>&gt;table(df$Mon)

 Apple  Banana
  3      2
</code></pre>

<p>But here i want name of most frequent fruit in new column.     </p>

<p>If we need the "Count" and "Names" corresponding to the <code>max</code> "Count", we loop through the rows of the dataset (using <code>apply</code> with <code>MARGIN = 1</code>), use <code>table</code> to get the frequency, extract the maximum value from it and the <code>names</code> corresponding to the maximum value, <code>rbind</code> it and <code>cbind</code> with the original dataset.</p>

<pre><code>cbind(df1, do.call(rbind, apply(df1[-1], 1, function(x) {
              x1 &lt;- 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
</code></pre>

<hr>

<p>Or we can use <code>data.table</code></p>

<pre><code>library(data.table)
setDT(df1)[, c("Names", "Count") := {tbl &lt;- table(unlist(.SD))
                    .(names(tbl)[which.max(tbl)], max(tbl))}, by = Name]
</code></pre>

python pyspark rpy2 word-frequency