【问题标题】:Categorizing the contents of a vector对向量的内容进行分类
【发布时间】:2012-04-26 12:18:08
【问题描述】:

这是我的问题:

myvec <- c(1, 2, 2, 2, 3, 3,3, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 9, 10, 10, 10)

我想开发一个函数,可以根据我定义的类别数量来满足这个向量的需求。

如果类别为 1,则所有 newvec 元素将为 1

如果类别是 2 则

唯一的(myvec),即

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

(奇数或偶数的情况)

如果类别为 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 类似,然后重复该模式。

【问题讨论】:

  • 能否请您发布您目前拥有的代码? Stack Overflow 在这里提供帮助,而不是为您编写代码。
  • 你希望它输出为data.frame吗?
  • @KLibby 对此感到抱歉,我理解您的建议....我确实尝试了一些不同的事情(没有一点给出任何东西),现在可能与发布无关,因为答案已经在地点

标签: r class function categories


【解决方案1】:

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

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
}

【讨论】:

    【解决方案2】:

    使用 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
    

    或使用rep:

    R> x <- sort(unique(myvec))
    R> y <- rep(1:n, length.out=length(x))
    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
    

    【讨论】:

    • 好主意!但是如何使用这个向量y 来获得最终结果呢?我觉得答案很简单……
    • 原创解决方案!谢谢。
    猜你喜欢
    • 2022-12-29
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2019-06-02
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多