#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