Почему as.numeric не работает?

#r

#r

Вопрос:

У меня есть data.frame senti как:

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

Я меняю столбец senti (столбец «n»), и я пытаюсь изменить каждое значение 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
 

но, это не работает, я не понимаю, почему. Я предполагаю, что там может быть какой-то набор исходной матрицы, но мой код слишком длинный, чтобы вставить их все сюда. Кто-нибудь может помочь?

Комментарии:

1. Матрица может содержать только один тип.

2. Чтобы продолжить примечание Дасона: переключитесь на data.frame

Ответ №1:

Сначала вы говорите, что у вас есть фрейм данных, затем говорите, что у вас есть матрица… что это? Вашей второй попыткой было преобразовать одну ячейку в numeric, но вы не можете иметь смешанный столбец в data.frame. Вам нужно преобразовать весь столбец сразу

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

Также может быть возможно, что один из столбцов является списком, что str(senti) дает? Возможно, вам придется сначала отменить список этого столбца.

Комментарии:

1. Error: (list) object cannot ... есть ли намек на то, что столбцы могут иметь тип list

Ответ №2:

Вы также можете получить результат с помощью:

 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