更改特定变量组的一个列值

时间:2017-03-31 06:03:38

标签: r dplyr

我有以下数据集:

help <- data.frame(id = c(rep(5, times = 5), rep(12, times = 3), rep(33, times = 2), rep(54, times = 3), rep(66, times = 4)),
                   ob = c(rep(1, times = 5), rep(0, times = 3), rep(1, times = 2), rep(0, times =3), rep(1, times =4)))

我试图只将id = 5和66的值从1更改为0,所以df看起来像这样:

    id ob
1   5  0
2   5  0
3   5  0
4   5  0
5   5  0
6  12  0
7  12  0
8  12  0
9  33  1
10 33  1
11 54  0
12 54  0
13 54  0
14 66  0
15 66  0
16 66  0
17 66  0

我试过了:

change <- c(5, 66)
mutate(help, ob = ifelse(xor(id %in% change), ob == 0, 1))

但我一直遇到错误而且我不想改变任何其他id的值,只改变指定的id。我可以通过过滤,替换和重新加入来做到这一点,但猜测有一个更快的解决方案。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

我们可以使用%in%创建一个逻辑索引,然后根据它将'ob'的值赋值为0

help$ob[help$id %in% c(5, 66)] <- 0

如果我们使用ifelse,那么

help$ob <- with(help, ifelse(id %in% c(5, 66), 0, ob))

注意:这两个都是base R方法

答案 1 :(得分:0)

我们也可以data.table方式:

require(data.table)
setDT(help)
help[id %in% c(5, 66), ob := 0]