【发布时间】:2010-12-09 17:59:44
【问题描述】:
现在我通过循环遍历排序向量来做到这一点,但也许有一种使用内部 R 函数的更快方法,也许我什至不需要排序。
vect = c(41,42,5,6,3,12,10,15,2,3,4,13,2,33,4,1,1)
vect = sort(vect)
print(vect)
outvect = mat.or.vec(length(vect),1)
outvect[1] = counter = 1
for(i in 2:length(vect)) {
if (vect[i] != vect[i-1]) { counter = counter + 1 }
outvect[i] = counter
}
print(cbind(vect,outvect))
vect outvect
[1,] 1 1
[2,] 1 1
[3,] 2 2
[4,] 2 2
[5,] 3 3
[6,] 3 3
[7,] 4 4
[8,] 4 4
[9,] 5 5
[10,] 6 6
[11,] 10 7
[12,] 12 8
[13,] 13 9
[14,] 15 10
[15,] 33 11
[16,] 41 12
[17,] 42 13
代码用于在 X 轴上制作带有整数而不是真实数据的图表,因为对我来说 X 值之间的距离并不重要。 所以在我的例子中,最小的 x 值总是 1。最大的总是等于有多少个 X 值。
-- 编辑:由于对我的问题的一些误解,我在输出中添加了自给自足的代码。
【问题讨论】:
-
这个问题不清楚,因为它目前的措辞。您的输入数据是什么样的 (
csvdata)?最终产品应该是什么样子?您是否只是想获取 csvdata 中唯一值的列表?如果是这样,请查看table() -
我的数据是标记为 X 和 Y 的数字矩阵,但 csvdata 中只有一列对我来说很有趣,即 X,z 是一个新向量,其中包含来自 csvdata[,'X ']
-
抱歉,我看不到 factor 是如何满足我的需要的
-
@user393087 - 我们在这里遇到的是通信失败。您无法用英语、代码或伪代码表达您想要做什么。这显然不是那么简单,因为你没有人真正了解你想要什么。也许退后一步,再次描述您的问题,提供示例输入和所需的输出。最后,关于您为什么要这样做的任何提示都会有所帮助,因为可能有更简单、更有效的替代方法,并且可以让您更有效地回答您的实际问题。
-
我尝试做的事情我已经完成并粘贴了上面问题中的代码。我所问的是是否有一个内置函数可以做到这一点。我粘贴的这段代码有效!!我还在下面的帖子的评论中提供了输入和输出。而且我看不出所有这些负面情绪的原因。