基础R中的条件突变

时间:2018-03-06 18:07:09

标签: r

我有这个数据框:

gender <- c("m", "m", "f", "f")
value <- c(75, 50, 20, 80)
df <- data.frame(gender, value)
df

我想更改“值”列中的值,条件是“性别”列上的值。

如果目标更改是固定数字或字符,则突变很简单:

df$value[df$gender == "m"] <- 1

但是,如果目标值是原始值的变异,就像这样

df$value[df$gender == "m"] <- df$value * -1

我收到以下错误:

> Warning message:
> In df$value[df$gender == "m"] <- df$value * -1 :
> number of items to replace is not a multiple of replacement length 

基础R中是否可以使用可变目标值的条件变异?

4 个答案:

答案 0 :(得分:1)

您的代码中有不同的长度,如错误消息中所述。您可以尝试:df$value[df$gender == "m"] <- df$value[df$gender == "m"] * -1

答案 1 :(得分:1)

考虑ifelse(),如下:

df$value <- ifelse(df$gender == 'm', df$value * -1, df$value)

答案 2 :(得分:0)

有可能,你必须确保它们的长度和错误的长度相同。您可能想要做的是:

> length(df$value[df$gender == 'm'])
[1] 2
> length(df$value)
[1] 4

df$value[df$gender == "m"] <- df$value[df$gender == "m"] * -1

答案 3 :(得分:0)

或使用with()

df$value <- with(df, ifelse(gender == "m", value - 1, value))