在R中的循环中替换大于特定值的值

时间:2012-10-02 21:24:44

标签: r loops

我试图想出一种循环我的数据框并用小数点替换任何大于200的值的方法。

这是我的代码:

for (i in data$AGE) if (i > 199) i <- i*.01-2

以下是我的数据框的head()示例:

  AGE LOC RACE SEX WORKREL PROD1 ICD10 INJ_ST DTH_YEAR DTH_MONTH DTH_DAY ACC_YEAR ACC_MONTH ACC_DAY
1  26   5    1   1       0  1290  V865     UT     2003         1       1     2002        12      31
2  20   1    7   2       0  1899   X47     HI     2003         1       1     2003         1       1
3 202   1    2   2       0  1598   W75     FL     2003         1       1     2003         1       1
4  86   5    1   2       0  1807   W18     FL     2003         1       1     2002        12      14
5 203   1    2   1       0  1598   W75     GA     2003         1       1     2003         1       1
6  79   0    1   2       2   921   X49     MA     2003         1       1       NA        NA      NA

所以基本上,如果AGE的值大于200,那么我想将该值乘以.01然后减去2.

我的理由是因为任何200及以上的值都是以月为单位的年龄。

我不是统计数据或R天才,所以我提前谦卑地感谢所有建议。

2 个答案:

答案 0 :(得分:3)

data$AGE[data$AGE> 200] <- data$AGE[data$AGE > 200] * 0.01 - 2

答案 1 :(得分:3)

你可以做到这个相当优雅的withinreplace

data <- within(data, AGE <- replace(AGE, AGE > 200, AGE[AGE>200] * 0.01-2))

或者使用data.table来提高内存效率和语法优雅

library(data.table)
DT <- as.data.table(data)
# make sure that AGE is numeric not integer
DT[,AGE:= as.numeric(AGE)]

DT[AGE>200, AGE := AGE *0.01 -2]