我有一个数据框,其中一个名为store的数字列有一些负值。我想添加1440到负面,但我遇到了麻烦。我的数据如下:
score
1 816
2 -200
3 976
4 -376
5 1
6 121
7 -331
我可以使用temp[temp$score< 0] <-8888
替换值。
但是,当我尝试使用:temp[temp$score < 0] <- temp$score + 1440
为变量添加值时,我收到一条警告:
Warning message: In temp$score[temp$score < 0] <- temp$score + 1440
:number of items to replace is not a multiple of replacement length
然后我得到了一些奇怪的值:
score
1 816
2 2256
3 976
4 1240
5 1
6 121
7 2416
我是否错误地调用了该功能,或者我选择了错误的情况?
答案 0 :(得分:5)
从您的警告消息中,您似乎尝试执行以下操作:
temp$score[temp$score < 0] <- temp$score + 1440
问题在于,您正在使用不同长度的向量替换向量,如警告消息所示。你缩短了作业的左侧,但没有缩短右侧 - 解决方案也是缩短右侧,如下所示:
score <- c(816,-200,976,-376,1,121,-331)
temp <- data.frame(score)
temp$score[temp$score < 0] <- temp$score[temp$score < 0] + 1440
答案 1 :(得分:2)
如评论中所述,如果有NA数据,则下标将失败:
> temp
score z
1 123 1
2 NA 2
3 345 3
4 -10783 4
5 1095 5
6 873 6
> temp$score[temp$score < 0] <- temp$score[temp$score < 0] + 1440
Error in temp$score[temp$score < 0] <- temp$score[temp$score < 0] + 1440 :
NAs are not allowed in subscripted assignments
所以请使用which
:
> temp$score[which(temp$score < 0)] <- temp$score[which(temp$score < 0)] + 1440
> temp
score z
1 123 1
2 NA 2
3 345 3
4 -9343 4
5 1095 5
6 873 6