有关更改数据集中的值的问题

时间:2018-06-04 10:34:02

标签: r

我正在为超市中的不同品牌进行销售预测,我想特别取代价格低于销售价格的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 :(得分: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