Quick start with R: Conditional counting (Part 17)

Counting elements in a dataset

Combining the length() and which() commands gives a handy method of counting elements that meet particular criteria.
b <- c(7, 2, 4, 3, -1, -2, 3, 3, 6, 8, 12, 7, 3)
b

Let’s count the 3s in the vector b.
count3 <- length(which(b == 3))
count3

In fact, you can count the number of elements that satisfy almost any given condition.
length(which(b < 7))

Here is an alternative approach, also using the length() command, but also using square brackets for sub-setting:
length(b[ b < 7 ])

R provides another alternative that not everyone knows about

sum(b < 7)

This syntax gives a count rather than a sum. Be aware of the meaning of syntax like sum(b < 7). Both work on logical vectors whose elements are either TRUE or FALSE. Try entering b < 7 at the keyboard.
b < 7

We see that sum(b < 7) counts the number of elements that are TRUE. There are nine such elements.
Now try:
mean(b < 7)

That syntax found the proportion of elements meeting the criterion rather than the mean. Again, if you use the sum() and mean() function you must be very careful to ensure that your output is what you intended. Note that sum(), length() and length(which()) all provide mechanisms for counting elements.
Now find the percentage of 7s in b.
P7 <- 100 * length(which(b == 7)) / length(b)
P7

Extension example

You can find counts and percentages using functions that involve length(which()). Here we create two functions; one for finding counts, and the other for calculating percentages.
count <- function(x, n){ length((which(x == n))) }
perc <- function(x, n){ 100*length((which(x == n))) / length(x) }
Note the syntax involved in setting up a function in R. Now let’s use the count() function to count the threes in the vector b and the perc() function to calculate percentage of 4s in b.
count(b, 3)
perc(b, 4)


That wasn’t so hard! In Blog 18 I will present another tip for data analysis in R.
See you later!
David

Annex: R codes used

[code lang=”r”]
# Create a vector b.
b <- c(7, 2, 4, 3, -1, -2, 3, 3, 6, 8, 12, 7, 3)
b

# Count the 3s in the vector b.
count3 <- length(which(b == 3))
count3

# Another example of counting.
length(which(b < 7))

# An alternative approach to counting.
length(b[ b < 7 ])

# Another alternative approach to counting
sum(b < 7)
b < 7

# Proportion of elements in b less than 7
mean(b < 7)

# Percentage of 7s in b.
P7 <- 100 * length(which(b == 7)) / length(b)
P7

# Create two functions count and percentage.
count <- function(x, n){ length((which(x == n))) }
perc <- function(x, n){ 100*length((which(x == n))) / length(x) }
count(b, 3)
perc(b, 4)
[/code]