R 数据帧中某个范围内的唯一值数
从数据帧中,我想提取Y的特定范围内(例如,每0-100、101-200、201-300等,直到3000)的唯一值(X)的数量 示例dfR 数据帧中某个范围内的唯一值数,r,plyr,R,Plyr,从数据帧中,我想提取Y的特定范围内(例如,每0-100、101-200、201-300等,直到3000)的唯一值(X)的数量 示例df X Y 169 183 546 64 154 148 593 203 60 243 568 370 85 894 168 169 154 148 83 897 … 一种耗时的方法是为每个范围运行以下代码: junk<-subset(df, Y >
X Y
169 183
546 64
154 148
593 203
60 243
568 370
85 894
168 169
154 148
83 897
…
一种耗时的方法是为每个范围运行以下代码:
junk<-subset(df, Y > 0 & Y < 100)
length(unique(junk$record.no))
垃圾0&Y<100)
长度(唯一(垃圾$record.no))
但我必须问问专家们——一定有更好的方法吗?您可以根据需要的范围和数据帧的大小运行for循环,然后通过转换为因子来计算级别数:
range <- 100 #based on example
loops <- nrow(df)/range
lvlMatrix <- matrix(nrow=0,ncol=2,dimnames=list(NULL,c("range","unique values")))
for(a in 1:loops){
sub <- df[((a-1)*range):(range*a),]
lvls<-nlevels(factor(sub$X))
lvlMatrix <- rbind(lvlMatrix,cbind(paste(as.character((a-1)*range),"-",as.character(range*a),sep=""),lvls))
}
范围这似乎有效:
aggregate(DF$X, list(cut(DF$Y, seq(0, 1000, 100))), function(x) unique(x))
# Group.1 x #or length(unique(x))
#1 (0,100] 546
#2 (100,200] 169, 154, 168
#3 (200,300] 593, 60
#4 (300,400] 568
#5 (800,900] 85, 83
您可以使用by()
和cut()
:
data+1table(data$Groups)
此时也可以正常工作。使用对象覆盖函数数据时要小心。
data <- data.frame(X=ceiling(rnorm(10000, 500, 10)), Y=runif(10000, 0, 3000))
data$Groups <- cut(data$Y, seq(0, 3000, 100)) # Create a categorical variable for each range
by(data$X, data$Group, function(x) length(unique(x)))