向量中的编号元素

时间:2012-02-05 02:18:50

标签: r

我想对矢量的元素进行编号,将“1”分配给矢量中的最小元素。我知道如何做到这一点,但我的解决方案(下面包含的代码)似乎过于复杂。有一个更简单的解决方案吗?

在下面的例子中,矢量'data'中有5个唯一的数字。数字3是最小的,应该分配数字'1';数字100是最大的,应该分配数字'5'。

矢量'数据'的所需解决方案是:c(2,3,4,4,3,1,5)

data <- c(5,8,12,12,8,3,100)
unique.numbers <- sort(unique(data))
numbering <- seq(1:length(unique(data)))
template <- cbind(numbering,unique.numbers)
output <- rep(NA, length(data))
for(i in 1:length(data)) { 
  for(j in 1:dim(template)[1]) { 
      if(data[i]==template[j,2]) output[i]=j 
  }
}
output

感谢您的任何建议。我正在尝试通过编程提高效率。

马克米勒

3 个答案:

答案 0 :(得分:8)

您程序的更紧凑版本。

dat <- c(5,8,12,12,8,3,100)
dat_sorted <- sort(unique(dat))
match(dat,dat_sorted)

答案 1 :(得分:4)

如果您使用的是数字或整数数据,则可以使用as.numeric(factor())

dat <- c(5,8,12,12,8,3,100)
as.numeric(factor(dat))

另外,作为旁注,您应避免在data中使用R作为变量名称,因为它已经是内置函数。

答案 2 :(得分:3)

另一种可能性是:

> rank(data)
[1] 2.0 3.5 5.5 5.5 3.5 1.0 7.0

你可以看到关于如何处理关系的参数“ties.method”。