使用因素和应用功能时出现问题

时间:2013-11-12 12:34:19

标签: r sapply

我所拥有的是一个数据框,其中包含一个因子字段,该字段包含用作因子的一系列值。据我所知,它基本上是数值的箱子。

我想要做的是将它们转换为数值,以便我可以在下游分析中使用它们。这个想法很简单; (a)得到一个取得因子水平的函数,在破折号处拆分并提取数值并计算平均值;(b)应用列的函数

data$Range.mean <- sapply(data$Range, 
                             function(d) {
                               range <- as.matrix(strsplit(as.character(d), "-"))
                               (as.numeric(range[,1]) + as.numeric(range[,2]))/2
                             })

出现以下错误

Error in FUN(X[[1L]], ...) : 
  (list) object cannot be coerced to type 'double'

我尝试了lapply而没有任何区别。在寻找答案的同时,我找到了一些解决这个问题的方法,它实际上是分别将下限和上限分别提取到各个数组,然后当然计算成对平均值是微不足道的。

我想了解我在做什么/想错了。为什么我的代码会出错,这个错误意味着什么呢?

1 个答案:

答案 0 :(得分:2)

你是正确的,事实上,因素是带有标签箱的整数。所以如果你有这样的因素

x <- factor(c("0-1", "0-1", "1-2", "1-2"))

它基本上是以下组件的组合

as.integer(x)
levels(x)

要将因子转换为其标签指定的实际值,您可以绕过as.character并将其解析为数字。

# Recreating a data frame with a factor like yours
data <- data.frame(Range = cut(runif(100), 0:10/10))
levels(data$Range) <- sub("\\((.*),(.*)]", "\\1-\\2", levels(data$Range))

# Calculating range means
sapply(strsplit(as.character(data$Range), "-"),
       function(x) mean(as.numeric(x)))