4

What I am trying to do is adding a column by "places" that count the id occurrence in the whole column "id' :

 id <- c(204850, 204850, 204850,312512,312512,452452,285421,758412,758412,758412)
places <- c("kitchen","kitchen","garden","salon","salon","salon","bathroom","garden","bathroom","garden")
 df <- data.frame(id, places)
 

    > df
           id   places
    1  204850  kitchen
    2  204850  kitchen
    3  204850   garden
    4  312512    salon
    5  312512    salon
    6  452452    salon
    7  285421 bathroom
    8  758412   garden
    9  758412 bathroom
    10 758412   garden

the only option I saw is by count in dplyr but it is create a new data frame.

The output should look like this:

> df
       id   places id_occurrence
1  204850  kitchen             3
2  204850  kitchen             3
3  204850   garden             3
4  312512    salon             2
5  312512    salon             2
6  452452    salon             1
7  285421 bathroom             1
8  758412   garden             3
9  758412 bathroom             3
10 758412   garden             3
Phil
  • 7,287
  • 3
  • 36
  • 66
nomi
  • 91
  • 7

2 Answers2

3

You can use the following solution:

library(dplyr)

df %>%
  group_by(id) %>%
  add_count(name = "id_occurrence")

# A tibble: 10 x 3
# Groups:   id [5]
       id places   id_occurrence
    <dbl> <chr>            <int>
 1 204850 kitchen              3
 2 204850 kitchen              3
 3 204850 garden               3
 4 312512 salon                2
 5 312512 salon                2
 6 452452 salon                1
 7 285421 bathroom             1
 8 758412 garden               3
 9 758412 bathroom             3
10 758412 garden               3
Anoushiravan R
  • 21,622
  • 3
  • 18
  • 41
3

We could also do this without grouping

library(dplyr)
df %>%
  add_count(id, name = 'id_occurence')
akrun
  • 874,273
  • 37
  • 540
  • 662