全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
15484 10
2016-05-30
示例数据,共有两列
1        42                        
1        65                        
1        79                        
1        164                        
2        34                        
2        58                        
2        103                        
3        5                        
3        109                        
                                
想得到的结果,就是第一列为1时,第二列和第三列输出统计范围的区间,第四列输出这个范围有多少个数据,第五列是数据占总数据的比列                                
                                
1        0            99          3        0.3333333333 (这个区间的数值占总数的比例,本例共9个数,即3除以9)
1        100        199        1        0.1111111111
2        0            99          2        0.2222222222
2        100        199        1        0.1111111111
3        0            99          1        0.1111111111
3        100        199        1        0.1111111111

实际数据量很大,求用R语言实现
这个苦苦思索了好长时间,无解,恳求高人帮助

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-5-30 11:27:46
“想得到的结果,就是第一列为1时”第一列为1指的是两列的数据中只计算第一列为1的 对应的第二列的情况?
另外最大值已知吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-5-30 11:37:38
zl66983279 发表于 2016-5-30 11:27
“想得到的结果,就是第一列为1时”第一列为1指的是两列的数据中只计算第一列为1的 对应的第二列的情况?
对,是的,第1列为1时,对其对应第二列数值分布进行统计;第1列为2时,对其对应第二列数值分布进行统计。最大值已知,但是每组都不一样
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-5-30 14:50:53
时间不多 你要的基本上写出来了 剩下的你自己调调吧
data<- data.frame(c1=c(1,1,1,2,2,2,3,3,3),c2=c(45,128,259,321,1233,63,121,223,1232)) #设原始数据为data,两列分别为c1,c2
j <- unique(data$c1)   #将c1列去重
for (i in j) {  #按每个c1循环
new_data<- data[data$c1==i,]  
max_num<- max(new_data[,2]) #找到每个c1的最大值
max_range<-(max_num%/%100+1)*100-1  #找到最大的范围值
range<- cut(new_data[,2],seq(-1,max_range,100))  #从-1到最大值范围值区间化
data[data$c1==i,"c3"]<- as.character(range) #将区间值加到源数据中
}
new<- as.data.frame( table(data[,c(1,3)]))  #统计区间值
new<-new[new$Freq>0,]
sum_num<- sum(data$c2)     #求c2列之和
new<- cbind(new,new$Freq/sum_num)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-5-30 14:51:59
data<- data.frame(c1=c(1,1,1,2,2,2,3,3,3),c2=c(45,128,259,321,1233,63,121,223,1232)) #设原始数据为data,两列分别为c1,c2
j <- unique(data$c1)   #将c1列去重
for (i in j) {  #按每个c1循环
new_data<- data[data$c1==i,]  
max_num<- max(new_data[,2]) #找到每个c1的最大值
max_range<-(max_num%/%100+1)*100-1  #找到最大的范围值
range<- cut(new_data[,2],seq(-1,max_range,100))  #从-1到最大值范围值区间化
data[data$c1==i,"c3"]<- as.character(range) #将区间值加到源数据中
}
new<- as.data.frame( table(data[,c(1,3)]))  #统计区间值
new<-new[new$Freq>0,]
sum_num<- sum(data$c2)     #求c2列之和
new<- cbind(new,new$Freq/sum_num)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-5-30 14:54:05
data<- data.frame(c1=c(1,1,1,2,2,2,3,3,3),c2=c(45,128,259,321,1233,63,121,223,1232)) #设原始数据为data
j <- unique(data$c1)   #将c1列去重
for (i in j) {  #按每个c1循环
new_data<- data[data$c1==i,]  
max_num<- max(new_data[,2]) #找到每个c1的最大值
max_range<-(max_num%/%100+1)*100-1  #找到最大的范围值
range<- cut(new_data[,2],seq(-1,max_range,100))  #从-1到最大值范围值区间化
data[data$c1==i,"c3"]<- as.character(range) #将区间值加到源数据中
}
new<- as.data.frame( table(data[,c(1,3)]))  #统计区间值
new<-new[new$Freq>0,]
sum_num<- sum(data$c2)     #求c2列之和
new<- cbind(new,new$Freq/sum_num)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群