我已经考虑过这种编码问题的几种方法,但到目前为止还没有任何结果。 我知道子集函数,但似乎不足以执行下面的确切任务。
鉴于下面的数据框A,我希望获得第二个数据帧,其中每个类别的负数最接近零,变为零。例如,对于类别A1,对于类别B10,我们将-4更改为零,-3最接近于零,因此我们将其更改为零,等等。
例如:
x_1 <- c("A1", "A1", "B10", "B10", "B10", "C100", "C100", "C100")
y_1 <- c(1, -4, -10, -3, 5, 8, -9, -11)
A <- data.frame(x_1, y_1)
x_2 <- c("A1", "A1", "B10", "B10", "B10", "C100", "C100", "C100")
y_2 <- c(1, 0, -10, 0, 5, 8, 0, -11)
B <- data.frame(x_2, y_2)
如您所见,我只想将y_2中最接近零的负数改为零,其他数字可以保持不变。这似乎是一个简单的编码任务,我很感激任何帮助。
谢谢
答案 0 :(得分:0)
x_1 <- c("A1", "A1", "B10", "B10", "B10", "C100", "C100", "C100")
y_1 <- c(1, -4, -10, -3, 5, 8, -9, -11)
A <- data.frame(x_1, y_1)
x_2 <- c("A1", "A1", "B10", "B10", "B10", "C100", "C100", "C100")
y_2 <- c(1, 0, -10, 0, 5, 8, 0, -11)
B <- data.frame(x_2, y_2)
这样的东西?
library(plyr)
tmpfun <- function(d) {
negy <- d[,2]<0 ## negative values
w <- which.max(d[negy,2]) ## closest to zero
d[negy,2][w] <- 0
d
}
ddply(A,"x_1",tmpfun)