R如何有条件地更新数据框中的数值

时间:2016-07-21 22:19:59

标签: r

我正在尝试更新数据框中由于输入错误而超过某个值时数值的值。价值应该是数百,但有时数以千计,因为它有额外的零。 数据框称为df,该列称为Value1

Value1 (sample values)
650
6640
550

7650的值应该是765.我正在尝试使用以下内容:

df$Value1[df$Value1>1000] <- df$Value1/10

这产生了非常奇怪的结果。我最终没有大于1000的值,但是6640的值变成74.1而不是我预期的664.

有什么建议吗?

提前致谢

3 个答案:

答案 0 :(得分:2)

以下是如何在一行中完成此操作,而无需计算两次目标行索引:

df$Value1[ris <- which(df$Value1>1000)] <- df$Value1[ris]/10;
df;
##   Value1
## 1    650
## 2    664
## 3    550

数据

df <- data.frame(Value1=c(650L,6640L,550L));

答案 1 :(得分:1)

或者我们可以使用data.table(来自@ bgoldst帖子的数据)

library(data.table)
setDT(df)[Value1 > 1000, Value1 := Value1/10]
df
#   Value1
#1:    650
#2:    664
#3:    550

答案 2 :(得分:0)

这是一种方式:

 #Sample data frame
 d1
  Value1
1    650
2   6640
3    550

d1$Value1 = as.numeric(substr(d1$Value1,1,3))

#result
d1
  Value1
1    650
2    664
3    550