7

我正在尝试重新编码 R 中的因子变量并使用以下代码:

library(car)
napier_captureComplexity=recode(napier$a_SpatialConnectivity,"'1 - Very simple and clear:     no diagrams, single sheets'=1;'2 - Reasonably simple: some simple diagrams or second sheets'=2;'3 - Reasonably complex: multiple diagrams or sheets but can be followed'=3;'4 - Moderately complex: multiple diagrams and sheets'=4;'5 - Very complex'=5;",as.factor.result=FALSE)

并得到以下错误信息:

Error in parse(text = range[[1]][1]) : <text>:1:1: unexpected INCOMPLETE_STRING 1: '4 - Moderately complex

在数字 4 下方有一个 ^

我不确定是什么原因造成的,我想知道 : 通过代码但我没有使用 c() 并且代码在数据集中具有相似字符串值的其他因素上执行良好。

任何帮助表示赞赏!

4

3 回答 3

5

这实际上是因为您的描述中的“:”。这个函数使用一些奇怪的evalstrsplit语句来工作。它最终分裂成“:”,因为这是它们语法中的特殊代码,似乎没有办法逃避它。

但我假设napier$a_SpatialConnectivity是那些给定水平的一个因素?factor()您可以通过在调用中显式设置级别来重新编码变量。

mylevels <- c("1 - Very simple and clear:     no diagrams, single sheets",
  "2 - Reasonably simple: some simple diagrams or second sheets", 
  "3 - Reasonably complex: multiple diagrams or sheets but can be followed", 
  "4 - Moderately complex: multiple diagrams and sheets", 
  "5 - Very complex")

napier_captureComplexity <- as.numeric(factor(napier$a_SpatialConnectivity, levels=mylevels))

这将按 1:5 的比例排序,这恰好是您尝试重新编码它们的方式。

于 2014-06-17T04:07:52.787 回答
2

recode似乎将 : 解释为表示一系列值,即使它在字符串内,并且 : 被解释为过早终止字符串。例如:

x = c("a","b","c")
recode(x, "'a'=1; 'b'=2; 'c'=3;")
[1] 1 2 3

x = c("a:d","b","c")
recode(x, "'a:d'=1; 'b'=2; 'c'=3;")
Error in parse(text = range[[1]][1]) : 
  <text>:1:1: unexpected INCOMPLETE_STRING
1: 'a
    ^

在我尝试过的每个示例中,字符串都在 : 处终止,从而导致错误。

于 2014-06-17T04:07:43.317 回答
1

任何处于类似位置但使用字符串而不是因子的人都应该能够使用gsub从数据中删除冒号。

napier_captureComplexityy <- gsub(":","",napier$a_SpatialConnectivity)

从字符串中省略冒号recode,应该很好。

于 2018-07-19T23:47:06.003 回答