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