我正在尝试更新数据框中由于输入错误而超过某个值时数值的值。价值应该是数百,但有时数以千计,因为它有额外的零。 数据框称为df,该列称为Value1
Value1 (sample values)
650
6640
550
7650的值应该是765.我正在尝试使用以下内容:
df$Value1[df$Value1>1000] <- df$Value1/10
这产生了非常奇怪的结果。我最终没有大于1000的值,但是6640的值变成74.1而不是我预期的664.
有什么建议吗?
提前致谢
答案 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