
[英]How to subset data frame using row & col indices stored in another data frame?
[英]creating subset (using a col of data frame) using for loop and finding unique values of another column
我是R的新手,并且一直坚持解决问题。 谁能指出我哪里出了问题我有以下数据*
Score TestID
1536 2
16000 18000
1 15
7 1800
738 256
有25000个测试ID,每个TestID都有一个相关的分数。 在这种情况下,分数的范围是0到16000。我需要绘制一个图表,显示在特定范围内存在的唯一TestID的数量,即
ScoreRange # of unique TestId
0 - 16000 ?
10 - 16000 ?
20 - 16000 ?
. .
. .
我编写了一个代码,其中我考虑的步长为10(对于范围),并找出该范围内的唯一TestID。 尽管我还没有准备好进行绘图,但是我仍在努力获取上述格式的输出。
final <- matrix(0, ncol = 2, nrow = length(seq(1,max(Combined$Score),
10)))
for (i in seq(1,max(df$Score), 10)) {
comp <- subset(Combined, Score >= i)
unik <- length(unique(comp$TestID))
final[,c(1,2)] <- c(i,unik)
}
对于final,我得到一个非常奇怪的输出,基本上是两个重复的值。 我要去哪里错了?
编辑:您的问题是,当您将for循环的结果写入“最终”矩阵时,您未指定将结果写入矩阵的哪一行。 为了解决这个问题,我创建了一个“计数器”变量,并在for循环之前将其设置为0,然后为循环的每次迭代添加1。 计数器指示将结果写入矩阵的哪一行。 尝试这个:
final <- matrix(0, ncol = 2, nrow = length(seq(0,max(Combined$Score),
10)))
counter<-0
for (i in seq(0,max(df$Score), 10)) {
counter<-counter+1
comp <- subset(df, Score >= i)
unik <- length(unique(comp$TestID))
final[counter,c(1,2)] <- c(i,unik)
}
您可能考虑的另一种解决方案是使用hist()
生成直方图。 使用breaks
参数可以为您提到的步长大小提供灵活性。 无论如何,我创建了一个迷你版的Combined
作为示例:
Combined <- data.frame(Score = sample(0:16000,15),
TestID = sample(0:25000,15))
> Combined
Score TestID
1 11456 14802
2 15854 1575
3 13738 22466
4 1659 14022
5 10671 4213
... ...
Combined.hist <- hist(Combined$Score,
breaks = seq(0,16000))
final <- data.frame(Score = Combined.hist$breaks,
Counts = c(length(Combined[Combined$Score == 0]$Score),
Combined.hist$counts))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.