Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 对向量的内容进行分类_R_Class_Function_Categories - Fatal编程技术网

R 对向量的内容进行分类

R 对向量的内容进行分类,r,class,function,categories,R,Class,Function,Categories,我的问题是: myvec <- c(1, 2, 2, 2, 3, 3,3, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 9, 10, 10, 10) 这是奇数或偶数的情况 如果类别为3,则前三个数字将为1:3,然后模式将重复 1 = 1, 2 = 2, 3=3, 4=1, 5 = 2, 6 = 3, 7 =1, 8 = 2, 9 = 3, 10 =1 如果类别为4,则第一个数字将为1:4,然后模式将重复 1 = 1, 2 = 2, 3= 3, 4 = 4, 5 = 1

我的问题是:

myvec <- c(1, 2, 2, 2, 3, 3,3, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 9, 10, 10, 10)
这是奇数或偶数的情况

如果类别为3,则前三个数字将为1:3,然后模式将重复

1 = 1, 2 = 2, 3=3, 4=1, 5 = 2, 6 = 3, 7 =1, 8 = 2, 9 = 3, 10 =1 
如果类别为4,则第一个数字将为1:4,然后模式将重复

1 = 1, 2 = 2, 3= 3, 4 = 4, 5 = 1, 6 = 2, 7=3, 8=4, 9 =1, 10 = 2

类似地,对于n个类别,第一个1:n,然后重复模式。

如果我正确理解了问题,这应该可以满足您的需要。您可以改变变量n以选择组的数量

1 = 1, 2 = 2, 3=3, 4=1, 5 = 2, 6 = 3, 7 =1, 8 = 2, 9 = 3, 10 =1 
myvec <- c(1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 9, 10, 10, 10)
out <- vector(mode="integer", length=length(myvec))
uid <- sort(unique(myvec))
n <- 3
for (i in 1:n) {
  s <- seq(i, length(uid), n)
  out[myvec %in% s] <- i
}

使用R的循环特性,如果向量长度不能被n整除,则发出警告:

R> myvec <- c(1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 9, 10, 10, 10)
R> n <- 3
R> y <- cbind(x=sort(unique(myvec)), y=1:n)[, 2]
R> y
 [1] 1 2 3 1 2 3 1 2 3 1
更新:您可以使用模运算符

R> myvec
 [1]  1  2  2  2  3  3  3  4  4  5  6  6  6  6  7  8  8  9 10 10 10
R> n <- 4
R> ((myvec - 1) %% n) + 1
 [1] 1 2 2 2 3 3 3 4 4 1 2 2 2 2 3 4 4 1 2 2 2

你能把你目前掌握的代码发出来吗?Stack Overflow在这里提供帮助,而不是为您编写代码。您想将其输出为data.frame吗?@KLibby对此表示抱歉,我理解您的建议……我确实尝试了一些不同的方法,没有一点前进的意思,现在可能与发布无关,因为答案已经准备好了好主意!但是如何使用这个向量y来获得最终结果呢?我觉得答案很简单…原创解决方案!非常感谢。
R> myvec
 [1]  1  2  2  2  3  3  3  4  4  5  6  6  6  6  7  8  8  9 10 10 10
R> n <- 4
R> ((myvec - 1) %% n) + 1
 [1] 1 2 2 2 3 3 3 4 4 1 2 2 2 2 3 4 4 1 2 2 2