如何使因子成为数值?

时间:2014-06-20 18:26:44

标签: r r-factor

这是我第二次发帖,所以我希望我能得到“可重复的例子”。

这是错误,

Error in if ((sound[i, 3] < -10 & sound[min(81, i + 1), 3] > -10) | (sound[i,  : 
  missing value where TRUE/FALSE needed
In addition: Warning messages:
1: In Ops.factor(sound[i, 3], -10) : < not meaningful for factors
2: In Ops.factor(sound[min(81, i + 1), 3], -10) :
  > not meaningful for factors
3: In Ops.factor(sound[i, 3], -10) : > not meaningful for factors
4: In Ops.factor(sound[min(81, i + 1), 3], -10) :
  < not meaningful for factors

这是代码,

> for(i in 3:length(sound[,2])){
+ if(sound[i,3]==-10){
+ soundout[m,7]=sound[i,2]
+ m=m+1}
+ if((sound[i,3]< -10&sound[min(81,i+1),3]>-10)|(sound[i,3]>-10&sound[min(81,i+1),3]< -10)){
+ soundout[m,7]=(10-sound[i,3])*(sound[i+1,2]-sound[i,2])/(sound[i+1,3]-sound[i,3])+sound[i,2]
+ m=m+1}}

有人可以告诉我如何使因子声音[1,3]成为一个数值吗? 谢谢,

1 个答案:

答案 0 :(得分:2)

对于可重现的示例,我们需要代码和数据。现在,我无法接受您的代码并在我的机器上运行它并产生您看到的相同错误(这是具有可重现的示例的含义)。您不需要向我们提供您的整个数据集,只需要一个类似的简单示例,其中包含5-10行,只有必要的列,以便我们可以看到正在发生的事情。

Senor O绝对正确,问题在于声音[,3]是一个因素。在运行您发布的代码之前,请运行:

colnames(sound) <- sound[1, ]
sound <- sound[-1:2, ]

sound[, 2] <- as.numeric(as.character(sound[, 2]))
sound[, 3] <- as.numeric(as.character(sound[, 3]))
sound[, 7] <- as.numeric(as.character(sound[, 7]))

这会将您想要进行算术运算的数据转换为数字。看起来你有不想在第1行和第2行使用的标题或数据,所以我只强制第三行和你在你的循环中使用的列。

编辑:MrFlick也是正确的,当您阅读数据时可能会预先解决这个问题,但不知道您正在阅读什么类型的文件以及您是如何做到的,我们不一定能说出什么你应该做。但是,如果您正在从磁盘读取类似CSV文件的内容,请设置as.is = TRUE,这会将数字作为数字,字符作为字符等等。