0

我有一个数据框,其中包含一个名为 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

我是在调用函数错误还是选择错误的案例?

4

2 回答 2

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 
于 2012-08-08T00:51:37.530 回答
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
于 2012-08-08T07:27:30.943 回答