为什么as.numeric不起作用?

时间:2014-06-24 00:02:36

标签: r

我有一个data.frame senti

p p p p
p p p p
p p p p

我更改了一列senti(" n"的col),我尝试将每个p更改为1,因此我将代码编写为:

senti[,4] <- data$Category
senti[senti=="p"] <- 1
 senti[senti=="n"] <- -1

然后,它不是数字1,所以我尝试将其转换为数字:

> senti<-as.numeric(senti)
Error: (list) object cannot be coerced to type 'double'
> senti[1,1]<-as.numeric(senti[1,1])
> senti[1,1]+senti[1,1]
Error in senti[1, 1] + senti[1, 1] : 
  non-numeric argument to binary operator

但是,它不起作用,我不明白为什么。我想可能有一些原始矩阵,但我的代码太长了,无法在这里粘贴所有这些。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

你首先说你有一个数据框,然后说你有一个矩阵......这是什么?您的第二次尝试是将单个单元格转换为数字,但您不能在data.frame中使用混合列。您需要立即转换整个列

senti[,1:4] <- sapply(senti[,1:4], as.numeric)

也可能其中一列是列表,str(senti)给出的是什么?您可能需要先取消该列的列表。

答案 1 :(得分:0)

您还可以通过以下方式获得结果:

senti <- read.table(text="p p p n
p p p n
p p p n",sep="",header=F)

 senti[] <- c(1,-1)[unlist(senti)]

 str(senti)
 #'data.frame': 3 obs. of  4 variables:
 #$ V1: num  1 1 1
 #$ V2: num  1 1 1
 #$ V3: num  1 1 1
 #$ V4: num  -1 -1 -1