一种基于R的频率将字符矢量转换为整数的有效方法

时间:2013-08-04 15:35:00

标签: r data-manipulation

我有一个仅由'a'或'g'组成的字符向量,我想根据频率将它们转换为整数,即更频繁的一个应编码为0,另一个为1,例如:

set.seed(17)
x = sample(c('g', 'a'), 10, replace=T)
x
# [1] "g" "a" "g" "a" "g" "a" "g" "g" "a" "g"
x[x == names(which.max(table(x)))] = 0
x[x != 0] = 1
x
# [1] "0" "1" "0" "1" "0" "1" "0" "0" "1" "0"

这样可行,但我想知道是否有更有效的方法。

(我们不必在此考虑50%-50%的情况,因为在我们的研究中不应该这样做。)

2 个答案:

答案 0 :(得分:3)

使用此:

ag.encode <- function(x)
{
  result <- x == "a"
  if( sum(result) > length(result) %/% 2 ) 1-result else as.numeric(result)
}

如果您想将标签保留在factor结构中,请改用:

ag.encode2factor <- function(x)
{
  result <- x == "a"
  if( sum(result) > length(result) %/% 2 )
  {
     factor(2-result, labels=c("a","g"))
  }
  else
  {
     factor(result+1, labels=c("g","a"))
  }
}

答案 1 :(得分:3)

您可以将角色向量转换为factor角色向量。此解决方案更通用,因为您不需要知道用于创建x的2个字符的名称。

y <- as.integer(factor(x))-1
if(sum(y)>length(y)/2) y <- as.integer(!y)