我正在分析一组包含多个重复ID和年份的数据。我试图按年计算唯一ID。我可以使用unique()计算所有年份的唯一ID。我尝试使用table()和aggregate()与unique()和length(),但得到" unique()仅适用于向量"错误。我写了一个" for"循环有效,但必须有一个更简单的方法来做到这一点。
以下是" for"的示例代码循环:
years <- as.factor( c( rep("2001",3), rep("2002", 5), rep( "2003", 4)))
id <- as.factor( rep(1:6,2))
mydata <- data.frame( years, id )
attach( mydata )
levels.year <- levels( years)
id.by.year <- data.frame( Year = 1:3, Counts = rep(NA, 3) )
for ( i in 1:3 ){
id.by.year[i,1] <- levels.year[i]
mydata.by.year <- mydata[ years == levels.year[i],]
id.by.year[i,2] <- length( unique( mydata.by.year$id))
}
id.by.year
输出如下:
Year Counts
1 2001 3
2 2002 5
3 2003 4
答案 0 :(得分:2)
尝试使用aggregate
years <- as.factor( c( rep("2001",3), rep("2002", 5), rep( "2003", 4)))
id <- as.factor( rep(1:6,2))
mydata <- data.frame( id, years ) # do not use `cbind`
aggregate(id~years, FUN=length, data=mydata)
## years id
##1 2001 3
##2 2002 5
##3 2003 4
答案 1 :(得分:2)
对两个维使用表,然后对逻辑> 0
操作的结果使用rowSums:
rowSums( with(mydata, table( years, id) ) > 0 )
2001 2002 2003
3 5 4
Jus添加这个以便你可以看到中间结构:
> with(mydata, table( years, id) )
id
years 1 2 3 4 5 6
2001 1 1 1 0 0 0
2002 1 1 0 1 1 1
2003 0 0 1 1 1 1