我试图想出一种循环我的数据框并用小数点替换任何大于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天才,所以我提前谦卑地感谢所有建议。
答案 0 :(得分:3)
data$AGE[data$AGE> 200] <- data$AGE[data$AGE > 200] * 0.01 - 2
答案 1 :(得分:3)
你可以做到这个相当优雅的within
和replace
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]