-1

我在 R 中有一个数据框(150000 obs,15 个变量),需要根据另一个变量的值更正一个变量的值的子集(只需乘以一个常数)。有什么简单的方法可以做到这一点?

我虽然 apply 会起作用,但我不确定如何编写函数(显然不能在函数中相乘)和限定符:

df$RESULT <- df[apply(df$RESULT, 1, function(x * 18.01420678) where(SITE==1)), ]
4

2 回答 2

4

你是这个意思?

dat      <- data.frame(x=1:10,y=sample(20,10))
constant <- 100
dat$y    <- ifelse(dat$x > dat$y, dat$y*constant, dat$y)
于 2013-04-05T14:54:27.547 回答
2

您可以使用“[”的容量来进行子集设置,但对于子集的“更正”,您需要使用在赋值两侧定义子集的逻辑表达式。由于您将只使用需要更正的值,因此您无需使用任何进一步的条件函数。

df[ df$SITE==1, "RESULT" ] <- df[ df$SITE==1, "RESULT"] * 18.01420678

如果要对大量(数百万)个案例进行操作或在模拟中重复进行操作,这种方法可能比该ifelse方法快得多

于 2013-04-05T15:17:27.260 回答