nik
nik

Reputation: 2584

how can I count the strings and set a number?

I have a data looking like this

df <- structure(list(Mydf = c("TNFM00000001497", "TNFM00000001617", 
"TNFM00000001617", "TNFM00000001617", "TNFM00000001617", "TNFM00000001626", 
"TNFM00000001626", "TNFM00000001626", "TNFM00000001626", "TNFM00000001629", 
"TNFM00000001629", "TNFM00000001630", "TNFM00000001630", "TNFM00000001630"
)), class = "data.frame", row.names = c(NA, -14L))

I want to count how many times a string is repeated and then give me an example output like this

String           Number of repeat
TNFM00000001497   1
TNFM00000001617   4
TNFM00000001626   4
TNFM00000001629   2
TNFM00000001630   3

Upvotes: 0

Views: 54

Answers (4)

AlexB
AlexB

Reputation: 3269

Another way would be:

aggregate(df$Mydf, list(freq = df$Mydf), length)

# freq x
# 1 TNFM00000001497 1
# 2 TNFM00000001617 4
# 3 TNFM00000001626 4
# 4 TNFM00000001629 2
# 5 TNFM00000001630 3

tapply can work here as well:

tapply(df$Mydf, df$Mydf, length)

Upvotes: 3

PaulS
PaulS

Reputation: 25528

Another possible solution:

library(tidyverse)

df %>% add_count(Mydf) %>% distinct

#>              Mydf n
#> 1 TNFM00000001497 1
#> 2 TNFM00000001617 4
#> 3 TNFM00000001626 4
#> 4 TNFM00000001629 2
#> 5 TNFM00000001630 3

Upvotes: 1

ThomasIsCoding
ThomasIsCoding

Reputation: 102880

Try table

> table(df)
df
TNFM00000001497 TNFM00000001617 TNFM00000001626 TNFM00000001629 TNFM00000001630
              1               4               4               2               3

or

> as.data.frame(table(df))
               df Freq
1 TNFM00000001497    1
2 TNFM00000001617    4
3 TNFM00000001626    4
4 TNFM00000001629    2
5 TNFM00000001630    3

or

> stack(table(df))
  values             ind
1      1 TNFM00000001497
2      4 TNFM00000001617
3      4 TNFM00000001626
4      2 TNFM00000001629
5      3 TNFM00000001630

Upvotes: 2

Ma&#235;l
Ma&#235;l

Reputation: 52399

Use group_by and count:

library(dplyr)

df %>% 
  group_by(String = Mydf) %>% 
  count()

# A tibble: 5 x 2
# Groups:   String [5]
  String              n
  <chr>           <int>
1 TNFM00000001497     1
2 TNFM00000001617     4
3 TNFM00000001626     4
4 TNFM00000001629     2
5 TNFM00000001630     3

Upvotes: 1

Related Questions