有选择性替换功能吗?应该使用 If 语句还是 For 循环来完成?

Is there a selective replace function? Should it be done using a If statement or For loop?

我是 R 的新手。我需要更多有关查找和替换功能的帮助,但它更具选择性。

我使用的示例数据集可以通过以下方式导出:

name_1 <- c("Madeline","Maximillian","Maxon","Mad","Marvin")
value <- c(2.3,3.4,7.5,1.9,16.2)
scoreboard_table <- data.frame(name_1,value)

name_2 <- c("Madeline","Maximillian","Maxon","Mad")
nickname_1 <- c("Mad","Max","M","N/A")
nickname_2 <- c("Madine","Maxim","N/A","N/A")
nickname_table <- data.frame(name_2,nickname_1,nickname_2)

我想用第二个昵称替换记分牌的名称table。在那种情况下,它会导致 scoreboard_table 变成:

name_1 <- c("Madine","Maxim","Maxon","Mad","Marvin")
value <- c(2.3,3.4,7.5,1.9,16.2)
scoreboard_table <- data.frame(name_1,value)

我确定是做一个 for 循环会更容易,还是做一个 if, else 语句。我应该如何处理这件事?

提前感谢您的帮助。非常感谢。

您可以执行联接并使用 coalescenickname_2 获取名称。

library(dplyr)

left_join(scoreboard_table, nickname_table, by = c('name_1' = 'name_2')) %>%
  transmute(name_1 = coalesce(nickname_2, name_1), 
            value) -> scoreboard_table

scoreboard_table

#  name_1 value
#1 Madine   2.3
#2  Maxim   3.4
#3  Maxon   7.5
#4    Mad   1.9
#5 Marvin  16.2

如果他们还没有将数据中的 "N/A" 值更改为真实值 NA

nickname_table[nickname_table == 'N/A'] <- NA