I have a simple data frame as follows.
table1 <- setNames(data.frame(matrix(ncol = 3, nrow = 0)), c("ID","Gender","Smoke"))
table1[1,]=c("1","M","N")
table1[2,]=c("1","F","N")
table1[3,]=c("2","M","N")
table1[4,]=c("2","F","S")
table1[5,]=c("1","M","N")
table1[6,]=c("1","F","N")
ID Gender Smoke
1 1 M N
2 1 F N
3 2 M N
4 2 F S
5 1 M N
6 1 F N
I would like to add two columns. The first column would be a count of how many instances the ID in column 1 has appeared. In this case, ID "1" appears 4 times, and ID "2" appears 2 times, so I would want it to show 4 for rows 1:2,5:6 and 2 for rows 3:4.
I would like the second column to represent exactly which instance of the particular ID that has occurred in the row. For this, row 1 is the first instance of "1" so it is assigned 1, while row 2 is the second instance of "1" so it would be assigned 2. Row 3 is the first instance of "2" so it is assigned 1, and likewise we get 2 for row 4, 3 for row 5, and 4 for row 6.
In the end the table would look something like this:
ID Gender Smoke IDTotal IDCount
1 1 M N 4 1
2 1 F N 4 2
3 2 M N 2 1
4 2 F S 2 2
5 1 M N 4 3
6 1 F N 4 4