假设我有这个数据框:
library(dplyr)
set.seed(1)
df <- tibble(sol_1 = sample(1:4, 10, replace = TRUE),
sol_2 = sample(1:4, 10, replace = TRUE))
# A tibble: 10 x 2
sol_1 sol_2
<int> <int>
1 1 3
2 4 3
3 3 1
4 1 1
5 2 1
6 1 2
7 3 2
8 3 2
9 2 2
10 2 3
我想更改变量中的值以包含它们各自的变量名称,如下所示:
# A tibble: 10 x 2
sol_1 sol_2
<chr> <chr>
1 sol_1_1 sol_2_3
2 sol_1_4 sol_2_3
3 sol_1_3 sol_2_1
4 sol_1_1 sol_2_1
5 sol_1_2 sol_2_1
6 sol_1_1 sol_2_2
7 sol_1_3 sol_2_2
8 sol_1_3 sol_2_2
9 sol_1_2 sol_2_2
10 sol_1_2 sol_2_3
哪个 rlang
变量会指示将变量名称用作字符串?我尝试过类似以下内容:
mutate_at(df, vars(starts_with("sol")), ~ paste(rlang::as_string(.x), .x, sep = "_"))
但显然我使用了错误的函数。
最佳答案
另一种选择是将其 reshape 为“长”,然后在转换后将其变回“宽”
library(dplyr)
library(tidyr)
library(stringr)
df %>%
mutate(rn = row_number()) %>%
pivot_longer(cols = -rn) %>%
mutate(value = str_c(name, value, sep="_")) %>%
pivot_wider(names_from = name, values_from = value) %>%
select(-rn)
# A tibble: 10 x 2
# sol_1 sol_2
# <chr> <chr>
# 1 sol_1_1 sol_2_3
# 2 sol_1_4 sol_2_3
# 3 sol_1_3 sol_2_1
# 4 sol_1_1 sol_2_1
# 5 sol_1_2 sol_2_1
# 6 sol_1_1 sol_2_2
# 7 sol_1_3 sol_2_2
# 8 sol_1_3 sol_2_2
# 9 sol_1_2 sol_2_2
#10 sol_1_2 sol_2_3
或者使用imap
library(purrr)
imap(df, ~ str_c(.y, .x, sep="_"))
关于r - 跨多个变量粘贴变量名称及其向量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59119572/