如何使用 tidyverse 管道重命名具有行字符值的列?
How to rename columns with row character values using tidyverse pipeline?
输入:
library(tidyverse)
df <- tibble(
a = c("z", "x", "y"),
b = c("m", "n", "o"),
c = c("p", "q", "r")
)
期望的输出:用第一行值(第 2 和第 3 列)替换第 2 和第 3 列名称。
# A tibble: 3 x 3
a m p
<chr> <chr> <chr>
1 z m p
2 x n q
3 y o r
到目前为止,这是我尝试过的。如您所见,我使用的向量 c("m", "p")
不是我想要的,我希望它是动态的。我也试过 cur_data()
但它不起作用 :/.
df %>%
rename_with(
~ str_replace(., ., c("m", "p")), tail(names(.), 2)
)
我们可以使用
library(dplyr)
df %>%
rename_with(~ unlist(df[1, -1]), names(.)[-1])
-输出
# A tibble: 3 x 3
# a m p
# <chr> <chr> <chr>
#1 z m p
#2 x n q
#3 y o r
或使用rename
df %>%
rename(!!! setNames(names(.)[-1], .[1, -1]))
或者可以使用 set_names
df %>%
set_names(c(names(.)[1], unlist(.[1, -1])))
有点冒险,但还是可以修改更多栏目:
library(dplyr)
library(purrr)
df %>%
rename_with(~ df %>%
select(b, c) %>%
map_chr(., ~ first(.x)), .cols = c(2, 3))
# A tibble: 3 x 3
a m p
<chr> <chr> <chr>
1 z m p
2 x n q
3 y o r
输入:
library(tidyverse)
df <- tibble(
a = c("z", "x", "y"),
b = c("m", "n", "o"),
c = c("p", "q", "r")
)
期望的输出:用第一行值(第 2 和第 3 列)替换第 2 和第 3 列名称。
# A tibble: 3 x 3
a m p
<chr> <chr> <chr>
1 z m p
2 x n q
3 y o r
到目前为止,这是我尝试过的。如您所见,我使用的向量 c("m", "p")
不是我想要的,我希望它是动态的。我也试过 cur_data()
但它不起作用 :/.
df %>%
rename_with(
~ str_replace(., ., c("m", "p")), tail(names(.), 2)
)
我们可以使用
library(dplyr)
df %>%
rename_with(~ unlist(df[1, -1]), names(.)[-1])
-输出
# A tibble: 3 x 3
# a m p
# <chr> <chr> <chr>
#1 z m p
#2 x n q
#3 y o r
或使用rename
df %>%
rename(!!! setNames(names(.)[-1], .[1, -1]))
或者可以使用 set_names
df %>%
set_names(c(names(.)[1], unlist(.[1, -1])))
有点冒险,但还是可以修改更多栏目:
library(dplyr)
library(purrr)
df %>%
rename_with(~ df %>%
select(b, c) %>%
map_chr(., ~ first(.x)), .cols = c(2, 3))
# A tibble: 3 x 3
a m p
<chr> <chr> <chr>
1 z m p
2 x n q
3 y o r