R:无法将系数转换为数字
我有一个因子向量:R:无法将系数转换为数字,r,R,我有一个因子向量: yoyo如果您只想将向量的类从因子更改为数值(正如我想您所问的)一个简单的as.numeric或c就足够了。如果您想要以某种方式表示相关间隔的数值(您的因子向量很可能是cut函数的输出),您应该指定所需的值(因为级别指定的是范围,而不是单个值)。我提出了一种显示每个间隔平均值的方法。例如,将[0,1)值替换为0.5 require(stringr) colMeans(matrix(as.numeric(simplify2array(str_extract_al
yoyo如果您只想将向量的类从因子
更改为数值
(正如我想您所问的)一个简单的as.numeric
或c
就足够了。如果您想要以某种方式表示相关间隔的数值(您的因子向量很可能是cut
函数的输出),您应该指定所需的值(因为级别指定的是范围,而不是单个值)。我提出了一种显示每个间隔平均值的方法。例如,将[0,1)
值替换为0.5
require(stringr)
colMeans(matrix(as.numeric(simplify2array(str_extract_all(levels(yoyo),"[0-9]+"))),nrow=2))[yoyo]
要获得级别的下限和上限,可以使用
sapply(strsplit(as.character(yoyo), split=','),
function(x) as.numeric(gsub(x, pattern="[^0-9]+", replacement="")))
要获得下限和上限,另一种方法是:
library(stringr)
read.table(text=str_trim(gsub("[^0-9]+", " ", yoyo)),sep="")
如果您所追求的是用于创建yoyo的第一个c(1L,3L,…)
序列,
然后(编辑)as.numeric(yoyo)
就是所需的全部
编辑-我在下面艰难地做着。不要做我做过的事
newstring <- rep(NA,length(yoyo))
(for j in 1:(length(levels(yoyo))) {
indx <- which((yoyo)==levels(yoyo)[j])
newstring[c(indx)] <- j
}
newstring Justas.numeric(yoyo)
?@nicola,不,不,不,这是一个典型的错误。因子是数字的,但用户几乎总是想要因子的标签,因此必须以.numeric(as.character(Factors))的形式执行as.numeric(as.character(Factors))
。这在R-FAQ中。你在说什么?他想强制使用数字,似乎他不想要标签。另外,你的行只生成NA。你有cut
的结果。每个条目/级别有两个值,例如,“[0,1)”
,你到底想把什么转换成数字
?我注意到没有人,甚至回答者,显示出结果是什么或应该是什么。期望的结果是什么?如果使用剪切
的标签
参数而不是跳过这些环,会更好。为什么?这与作为数字有什么不同(yoyo)
?完全相同(newstring,as.integer(yoyo))
返回TRUE
@Shadow,我的道歉——你是对的。我被卷入了as.numeric(levels)
的变量漩涡中,没有注意。
newstring <- rep(NA,length(yoyo))
(for j in 1:(length(levels(yoyo))) {
indx <- which((yoyo)==levels(yoyo)[j])
newstring[c(indx)] <- j
}