У меня есть набор данных, который выглядит следующим образом: order year value<br> 1 1990 2<br> 1 1990 1<br> 1 1990 1<br> 2 1990 0<br> 3 1990 4<br> 1 1991 3<br> 2 1991 2<br> 2 1991 0
order year value<br> 1 1990 2<br> 1 1990 1<br> 1 1990 1<br> 2 1990 0<br> 3 1990 4<br> 1 1991 3<br> 2 1991 2<br> 2 1991 0
Я пытался подсчитать количество уникальных заказов за конкретный год. Я попытался table(data$year), что дает мне: 1990 1991<br> 5 3
table(data$year)
1990 1991<br> 5 3
Однако я бы хотел получить:
1990 1991<br> 3 2
Это сделает свое дело.Он использует tapply() для отдельного подсчета количества уникальных значений order для каждого уровня year.
tapply()
order
year
df <- read.table(text="order year value 1 1990 2 1 1990 1 1 1990 1 2 1990 0 3 1990 4 1 1991 3 2 1991 2 2 1991 0", header=T) with(df, tapply(order, year, function(X) length(unique(X)))) # 1990 1991 # 3 2
Обязательные параметры plyr и data.table:
dat <- read.table(text = txt, header = TRUE) library(plyr) ddply(dat, "year", summarize, val = length(unique(order))) library(data.table) dt <- data.table(dat) dt[, length(unique(order)), by = year]
Это также можно сделать, позвонив table на заказы unique вместо подробных.
table
unique
table( unique( df[,c("order","year")] )$year )