我正在为超市中的不同品牌进行销售预测,我想特别取代价格低于销售价格的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
我想问这条消息是什么意思,这是改变价值的合适方式。
提前致谢!
答案 0 :(得分:0)
你似乎想要一个向量,它是两个向量的成对最大值。
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