我有以下数据集:
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。我可以通过过滤,替换和重新加入来做到这一点,但猜测有一个更快的解决方案。任何帮助都会很棒。
答案 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]