你们能帮忙得到特定范围的“数量”吗?例如,我想知道得分为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个bin间隔的不同分数范围的计数我想要的分数范围是:每15个bin间隔0.5到1,1到1.5,2.0到2.5
谢谢你们...任何建议都将不胜感激
这里有一个使用by
的解决方案,正如你试图做的那样,但我用自定义函数替换了身份函数。对于每个时间间隔,我使用cut
将得分范围划分为区间,并使用tapply
计算每个得分区间的长度。使用rbind.
将all转换为矩阵
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
我不太确定你想要什么,把你的数据读到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
应该做的伎俩。
如果我理解你的问题,这是一个简单的解决方案:
table(cut(YOURDATA, breaks = seq.int(from = 0.5, to = 2.5, by = 0.5)))
你可以像这样定义一个布尔矢量:
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()。