我所拥有的是一个数据框,其中包含一个因子字段,该字段包含用作因子的一系列值。据我所知,它基本上是数值的箱子。
我想要做的是将它们转换为数值,以便我可以在下游分析中使用它们。这个想法很简单; (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
而没有任何区别。在寻找答案的同时,我找到了一些解决这个问题的方法,它实际上是分别将下限和上限分别提取到各个数组,然后当然计算成对平均值是微不足道的。
我想了解我在做什么/想错了。为什么我的代码会出错,这个错误意味着什么呢?
答案 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)))