我想对矢量的元素进行编号,将“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
感谢您的任何建议。我正在尝试通过编程提高效率。
马克米勒答案 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”。