将数据帧行中的值映射到新值

Ant*_*hop 3 r dplyr

我有一个数据框,说:

df <- tibble(question = 1:3, a = c('chicken', 'apple', 'beer'), b = c('chicken', 'banana', 'beer'), c = c('beef', 'apple', 'wine'))

question a       b       c    
>      <int> <chr>   <chr>   <chr>
1        1 chicken chicken beef 
2        2 apple   banana  apple
3        3 beer    beer    wine 
Run Code Online (Sandbox Code Playgroud)

我想用一些映射替换第 2 行中的值:

apple -> 1
banana -> 2
Run Code Online (Sandbox Code Playgroud)

因此得到的输出是:

question a       b       c    
>      <int> <chr>   <chr>   <chr>
1        1 chicken chicken beef 
2        2       1       2        1
3        3 beer    beer    wine 
Run Code Online (Sandbox Code Playgroud)

我查看过case_match,但它似乎需要一个向量,而我的数据是行而不是列。我想我可以使用 across() 来将其应用于特定行中的所有列,但不确定如何将这些部分组合在一起。

编辑:我对替换列和行的特定索引处的值不感兴趣。我感兴趣的是通过特定映射重新编码一行中的所有值。

Jon*_*ing 5

“如果该行不是 2,则单独保留 a:c 中的值,否则交换这些新值”:

df |>
  mutate(across(a:c, ~if_else(row_number() != 2, .,
                        case_match(., "apple" ~ "1", "banana" ~ "2"))))
Run Code Online (Sandbox Code Playgroud)

结果

  question       a       b    c
1        1 chicken chicken beef
2        2       1       2    1
3        3    beer    beer wine
Run Code Online (Sandbox Code Playgroud)
df <- data.frame(question = 1:3,
           a = c("chicken", "apple", "beer"),
           b = c("chicken", "banana", "beer"),
           c = c("beef", "apple", "wine"))
Run Code Online (Sandbox Code Playgroud)