为R中的数据框中的某些情况添加值

时间:2012-08-08 00:39:29

标签: r

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

我是否错误地调用了该功能,或者我选择了错误的情况?

2 个答案:

答案 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