将值部分分配给数据框时出现“替换中不支持的矩阵索引”

时间:2019-02-26 11:11:27

标签: r

我想更改数据框中的某些值。在这种情况下,负值乘以“ -0.5”。我可以使用下面的forif循环来实现它,尽管不是很整洁。

name  <- c("a", "b", "c")
value <- c(-10, 3,6)
df    <- data.frame(name, value)
for (n in 1:nrow(df)) {
  if (df$value[n] < 0) {
    df$value[n] <-df$value[n] * (-0.5)
  }
}

我尝试过这种方式:

df[df[2] < 0] <- df[2] * (-0.5)

但是发生错误,提示:

Error in `[<-.data.frame`(`*tmp*`, df[2] < 0, value = list(value = c(-2.5,  : 
  unsupported matrix index in replacement

我的代码怎么了?

1 个答案:

答案 0 :(得分:1)

我建议将所有行相乘,但对于肯定的行请使用1(乘以1不会改变任何内容)。例如:

# Return -0.5 for negative values and 1 for positive
df$value * ifelse(df$value < 0, -0.5, 1)
# [1] 5 3 6