我有一个数据框,说:
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() 来将其应用于特定行中的所有列,但不确定如何将这些部分组合在一起。
编辑:我对替换列和行的特定索引处的值不感兴趣。我感兴趣的是通过特定映射重新编码一行中的所有值。
“如果该行不是 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)