возникла проблема с изменением значения в наборе данных - PullRequest
0 голосов
/ 04 июня 2018

Я делаю прогноз продаж для различных брендов в супермаркете и хочу, в частности, заменить обычные цены на дезодорант DOVE, который имеет более низкий уровень цен, чем цена продажи, на цену продажи.Я попробовал следующую команду в R:

newthesis$DOVERPrice[newthesis$DOVERPrice < newthesis$DOVEPrice] <- newthesis$DOVEPrice

С этой командой компилятор выдает следующее сообщение:

Warning message:
In newthesis$AXERPrice[newthesis$AXERPrice < newthesis$AXEPrice] <- newthesis$AXEPrice :
number of items to replace is not a multiple of replacement length

Я хочу спросить, что указывает это сообщение, и будет ли этоподходящий способ изменить значение.

Заранее спасибо!

1 Ответ

0 голосов
/ 04 июня 2018

Вы, кажется, хотите получить вектор, который является парным максимумом двух векторов.

set.seed(1)

dtf <- as.data.frame(matrix(sample(1:20), 10))

dtf$max <- apply(dtf[,1:2], 1, max)

# or
dtf$max <- pmax(dtf[,1], dtf[,2])

head(dtf)
#    V1 V2 max
# 1   6  3   6
# 2   8  2   8
# 3  11 20  20
# 4  16 10  16

Вы получаете ошибку, потому что вектор, который вы хотите заменить, не имеет ту же длину, что и тот, который вы хотитезамените его на.

dtf$V1[dtf$V1 < dtf$V2]

# is shorter than

dtf$V2

# this will work, because the two vectors are of the same length
dtf$V1[dtf$V1 < dtf$V2] <- dtf$V2[dtf$V1 < dtf$V2]

Ошибка говорит о multiple of replacement length, потому что, строго говоря, они не должны быть одинаковой длины.Тот, которым вы заменяете, может быть короче, если его длина является делителем длины вектора, который вы заменяете.

# that's why this works
dtf$V1[dtf$V1 < dtf$V2] <- NA

# and this
dtf$V1[dtf$V1 < dtf$V2] <- 1:2

# but not this
dtf$V1[dtf$V1 < dtf$V2] <- 1:3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...