我在R中有一个数据框(150000个,15个变量),需要根据另一个变量的值来校正一个变量的值的子集(简单地乘以一个常数)。有什么简单的方法可以做到这一点?
我虽然申请会工作,但我不确定如何编写函数(显然不能在函数中繁殖)和限定符:
df$RESULT <- df[apply(df$RESULT, 1, function(x * 18.01420678) where(SITE==1)), ]
答案 0 :(得分:3)
dat <- data.frame(x=1:10,y=sample(20,10))
constant <- 100
dat$y <- ifelse(dat$x > dat$y, dat$y*constant, dat$y)
答案 1 :(得分:2)
您可以使用“[”的容量来进行子集化,但是对于子集的“校正”,您需要使用在赋值的两侧定义子集的逻辑表达式。由于您将只处理需要更正的值,因此不使用任何其他条件函数。
df[ df$SITE==1, "RESULT" ] <- df[ df$SITE==1, "RESULT"] * 18.01420678
如果要对大型(数百万)案例进行操作或在模拟中重复进行操作,则此方法可能比ifelse
方法快得多