你们能帮助获得特定范围的“计数”吗?例如,我想知道得分为0.5比1,1,1.5,2.0到2.5的次数等等。我在下面有一个样本数据。
Times Scores
0 0.6
1.2 0.5
1.8 1.2
2.4 1.4
3 1.5
3.6 2
4.2 0.5
4.8 0.6
5.4 0.4
6 1
6.6 1.1
8 0.6
9.4 1.5
10.8 1.5
12.2 1.3
13.6 1.6
15 1.4
16.4 1.2
17.8 1.4
19.2 2.6
20.6 2
22 2.2
23.4 2.4
24.8 1.4
26.2 1.2
27.6 0.5
29 0.8
30.4 1.4
31.8 1.6
33.2 2.2
34.6 2.5
36 3.6
37.4 3.78
38.8 2.5
40.2 3.5
41.6 3.4
43 3.5
44.4 3.3
45.8 2.1
47.2 2.3
48.6 0.6
50 0.7
51.4 0.8
52.8 1.4
54.2 1.5
55.6 1.6
57 1.5
58.4 1.2
59.8 1.1
61.2 1.56
62.6 2.02
64 2.48
65.4 2.94
66.8 3.4
68.2 2.1
69.6 2.8
71 3.9
72.4 2.3
73.8 2.4
75.2 5.5
76.6 4.6
78 1.2
79.4 1.3
80.8 1.4
82.2 1.8
83.6 0.5
85 0.2
86.4 0.3
87.8 0.6
89.2 0.4
90.6 0.5
92 0.6
93.4 1.06
94.8 1.52
96.2 1.98
97.6 2.44
99 2.9
100.4 3.36
101.8 3.82
103.2 0.6
104.6 0.5
106 1.2
107.4 1.4
108.8 1.5
110.2 2
111.6 0.5
113 0.6
114.4 0.4
115.8 1
117.2 1.1
118.6 0.6
120 1.5
121.4 1.5
122.8 1.3
124.2 1.76
125.6 2.22
127 2.68
128.4 3.14
129.8 3.6
131.2 4.06
132.6 4.52
134 4.98
135.4 5.44
136.8 5.9
138.2 6.36
139.6 6.82
141 0.6
142.4 0.5
143.8 1.2
145.2 1.4
146.6 1.5
148 2
149.4 0.5
150.8 0.6
152.2 0.4
153.6 1
155 1.1
156.4 0.6
157.8 1.5
159.2 1.5
160.6 1.3
162 1.76
163.4 2.22
164.8 2.68
166.2 3.5
167.6 3.3
169 2.1
170.4 2.3
171.8 0.6
173.2 0.7
174.6 0.8
176 1.4
177.4 1.5
178.8 1.6
180.2 1.5
181.6 1.2
183 1.1
184.4 0.5
185.8 0.6
187.2 0.1
188.6 0.8
190 0.5
191.4 0.6
192.8 0.3
194.2 0.5
195.6 1.5
197 1.8
198.4 2
199.8 2.2
我想把我的'Times'列分成15个bin区间,我可以做。我使用的代码是
下面的代码Data = cut(Sampledata$Times, seq(0,200, by=15), right=FALSE)
finaldata <- by(Sampledata, Data, FUN=I)
但现在我想知道如何获得每15个区间的不同分数范围的计数 我想要的分数范围是:每15个bin间隔0.5到1,1到1.5,2.0到2.5
谢谢你们......任何建议都将不胜感激
答案 0 :(得分:2)
这是一个使用by
的解决方案,正如您尝试的那样,但我用自定义函数替换了身份函数。对于每个时间间隔,我使用cut
将得分范围划分为区间,并使用tapply
计算每个得分区间的长度。使用rbind.
do.call(rbind,by(Sampledata, Data, FUN=function(x){
tapply(x$Scores,
cut(x$Scores,c( 0.5,1,1.5, 2.0 ,2.5)),
length)
}))
(0.5,1] (1,1.5] (1.5,2] (2,2.5]
[0,15) 4 7 2 NA
[15,30) 1 5 1 2
[30,45) NA 1 1 3
[45,60) 3 5 1 2
[60,75) NA NA 1 5
[75,90) 1 3 1 NA
[90,105) 2 1 2 1
[105,120) 3 4 1 NA
[120,135) NA 3 1 1
[135,150) 1 3 1 NA
[150,165) 3 4 1 1
[165,180) 3 2 1 2
[180,195) 3 3 NA NA
答案 1 :(得分:1)
我不确定你想要什么,将数据读到R并不是那么容易,但概念应该是:
我们假设data
包含您的数字,而U
是您的时间间隔的矢量,那么
set.seed(123);
data <- rnorm(1e3);
U <- c(0.5,1,1.5,2,2.5);
counts <- numeric(length(U)-1);
for(i in 1:length(counts)) {
counts[i] <- length(which(data>=U[i] & data<U[i+1]));
}
counts
[1] 146 83 46 22
应该这样做。
答案 2 :(得分:1)
如果我理解您的问题,这是一个简单的解决方案:
table(cut(YOURDATA, breaks = seq.int(from = 0.5, to = 2.5, by = 0.5)))
答案 3 :(得分:0)
你可以像这样定义一个布尔矢量:
a<-rep(F,length(Scores))
for (j in 1:length(Scores))
{
if(0.5<Scores[j] && 1>=Scores[j])
a[j]<-T
}
使用函数sum()来计算它的真实时间:
nb0.5to1<-sum(a)
对其他人进行同样的干预。如果您不想每次都重复定义,则可以使用函数seq()。