替换R中数据框中的值

ejn*_*ejn 2 grep r dataframe

我想在R里做一个有点复杂的任务.

我有一个data frame(为简单起见)三列.

第1列是一个字符串.
第2列是整数.
第3列是整数.

我想获取包含第1列中某个子字符串并且第2列具有精确值的所有观察结果,并将第3列替换为数字1.

也就是说,我有以下内容dataframe:

x <- data.frame(x1 = c("bob","jane","bob","bobby","bob","jane","bobby","bob","jane","bob"),
                x2 = c(1,1,1,1,1,2,2,2,2,2),
                x3 = c(13,22,3,34,10,23,53,42,13,35))
Run Code Online (Sandbox Code Playgroud)

并且,我想选择第1列包含bob和第2列== 1的观察结果,并将第3列更改为1,这样我最终得到:

y1 <- c("bob","jane","bob","bobby","bob","jane","bobby","bob","jane","bob")
y2 <- c(1,1,1,1,1,2,2,2,2,2)
y3 <- c(1,22,1,1,1,23,53,42,13,35)
y <- data.frame(y1,y2,y3)
Run Code Online (Sandbox Code Playgroud)

我想在一个非常非常大的数据集中做到这一点.拆分数据集并将其重新组合在一起是不可行的.我尝试过使用grep,但是当我尝试同时进行两场比赛时,它都无法正常工作.此外,我尝试了子集,但后来我必须分开dataframe并将它重新组合在一起.首先十分感谢.

42-*_*42- 5

使用R的逻辑索引[<-功能,这非常简单:

> x$x3[ grepl("bob", x$x1) & x$x2 == 1] <- 1
> x
      x1 x2 x3
1    bob  1  1
2   jane  1 22
3    bob  1  1
4  bobby  1  1
5    bob  1  1
6   jane  2 23
7  bobby  2 53
8    bob  2 42
9   jane  2 13
10   bob  2 35
Run Code Online (Sandbox Code Playgroud)

要读取代码,您应该将其视为:"对于x列'x1'具有"bob'且列'x2'等于1的每一行,...您将值1分配给列'x3'."如果你想拥有一个具有该值的新对象,你可以复制x y <- x并使用它来代替它.