I have a dataframe like this:
df <- data.frame(
SchoolID=c(\"A\",\"A\",\"B\",\"B\",\"C\",\"D\"),
Country=c(\"XX\",\"XX\",\"XX\",\"YY\"
One approach, which does not rely on third-party libraries:
> as.data.frame(rowSums(table(df[!duplicated(df), ]), na.rm=T))
rowSums(table(df[!duplicated(df), ]), na.rm = T)
A 1
B 2
C 1
D 1
aggregate(Country ~ SchoolID, df, function(x) length(unique(x)))
Or
tapply(df$Country, df$SchoolID, function(x) length(unique(x)))
Or
library(data.table)
setDT(df)[, .(NumberOfCountry = length(unique(Country))), by = SchoolID]
Or with v >1.9.5
setDT(df)[, .(NumberOfCountry = uniqueN(Country)), by = SchoolID]
Or
library(dplyr)
df %>%
group_by(SchoolID) %>%
summarise(NumberOfCountry = n_distinct(Country))
try this..
select School,count(Country)
from(
select distinct School,Country
from tbl_stacko) temp
group by School