Suppose I have a dataset like this:
id <- c(1,1,1,2,2,3,3,4,4)
visit <- c("A", "B", "C", "A", "B", "A", "C", "A", "B")
test1 <- c(12,16, NA, 11, 15,NA, 0,12, 5)
test2 <- c(1,NA, 2, 2, 2,2, NA,NA, NA)
df <- data.frame(id,visit,test1,test2)
I want to know the number of data points per visit PER test so that the final output looks something like this:
visit test1 test2
A 3 3
B 3 1
C 1 1
I know I can use the aggregate function like this for 1 variable as mentioned on this older post :
aggregate(x = df$id[!is.na(df$test)], by = list(df$visit[!is.na(df$test)]), FUN = length)
but how would I go about doing this for multiple tests?