从R中的数据帧中提取信息

时间:2013-12-02 13:49:31

标签: r dataframe

我已经考虑过这种编码问题的几种方法,但到目前为止还没有任何结果。 我知道子集函数,但似乎不足以执行下面的确切任务。

鉴于下面的数据框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中最接近零的负数改为零,其他数字可以保持不变。这似乎是一个简单的编码任务,我很感激任何帮助。

谢谢

1 个答案:

答案 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)