首页 > 解决方案 > R:如何从向量有效地创建类别?

问题描述

假设我在 R 中有一个0s 和1s 的向量。向量的长度是 6。所以有2^6 = 64组合。我的问题是除了编写 64ifelse条语句来返回 64 个不同的值(类别)之外,有没有更有效的方法来做到这一点?

case_classification <- function(df){
  aa      <- df["aa"]
  bb      <- df["bb"]
  cc      <- df["cc"]
  dd      <- df["dd"]
  ee      <- df["ee"]
  ff      <- df["ff"]

  if(aa == 1 && bb== 0 && cc == 0 && dd == 0 && ee == 0 && ff ==0){
      return 1;
  } else if(aa == 0 && bb== 1 && cc == 0 && dd == 0 && ee == 0 && ff ==0){
      return 2;
  }else if(...){

  } ...
}

标签: r

解决方案


我们可以做的

d1 <- do.call(expand.grid, lapply(df[strrep(letters[1:6], 2)], unique))
d1$value <- seq_len(nrow(d1))
merge(df, d1, all.x = TRUE)

另一种选择是interaction

as.integer(do.call(interaction, df[strrep(letters[1:6], 2)]))

推荐阅读