在R中同时修改多列

Modify multiple columns at same time in R

我不知道怎么说清楚,这也许就是我没有找到答案的原因,但我想同时编辑两个不同列的值,而它们是标识列。

例如这是数据:

> data = data.frame(name1 = c("John","Jake","John","Paul"),
           name2 = c("Paul", "Paul","John","John"),
           value1 = c(0,0,1,0),
           value2 = c(1,0,1,0))
> data
  name1 name2 value1 value2
1  John  Paul      0      1
2  Jake  Paul      0      0
3  John  John      1      1
4  Paul  John      0      0

我想编辑第一行的值,使第一行变成 Jake & John 而不是 John & Paul,所以我想结合这两行代码同时进行:

data$name1[(data$name1 == "John" & data$name2 == "Paul")] <- "Jake"
data$name2[(data$name1 == "John" & data$name2 == "Paul")] <- "John"

应该是一个简单的技巧,但我没有! 另外,我应该在更大的数据集上这样做,每次修改都可以出现在多行上,而且我不知道修改将出现在哪些行上

这个怎么样?

data[data$col1 == "A" & data$col2 == "B", ] <- list("B", "D")
data

#  col1 col2
#1    B    D
#2    A    C
#3    B    A
#4    B    B
library(tidyverse)

data %>% 
  mutate(
    name1=
      case_when(
        name1=="John" & name2=="Paul" ~ "Jake",
        TRUE ~ name1
      ),
    name2=
      case_when(
        name1=="John" & name2=="Paul" ~ "John",
        TRUE ~ name2))