我想選擇列并根據我保留在單獨資料框中的列的名稱重命名它們。
這是原始資料集:
df <- tribble(
~year, ~country, ~series1, ~series2,
2003, "USA", 8, 5,
2004, "USA", 9, 6,
2005, "USA", 11, 7,
2006, "USA", 10, 8
)
我想選擇并重命名兩列,我想這樣指定:
specs <- tribble(
~old_name, ~new_name,
"country", "region",
"series1", "gdp_growth"
)
我想要這個結果:
expected_df <- tribble(
~region, ~gdp_growth,
"USA", 8,
"USA", 9,
"USA", 11,
"USA", 10
)
這不起作用:
df %>%
select(specs$new_name = specs$old_name)
Error: unexpected '=' in: "df %>% select(specs$new_name ="
uj5u.com熱心網友回復:
df %>%
select(specs$old_name) %>%
rename_with(~specs$new_name, specs$old_name)
#> # A tibble: 4 x 2
#> region gdp_growth
#> <chr> <dbl>
#> 1 USA 8
#> 2 USA 9
#> 3 USA 11
#> 4 USA 10
uj5u.com熱心網友回復:
這個怎么樣?
df %>%
select(specs$old_name) %>% set_names(specs$new_name)
uj5u.com熱心網友回復:
我們可以做
library(dplyr)
library(tibble)
df %>%
select(!!! deframe(specs[2:1]))
-輸出
# A tibble: 4 × 2
region gdp_growth
<chr> <dbl>
1 USA 8
2 USA 9
3 USA 11
4 USA 10
uj5u.com熱心網友回復:
怎么樣:
library(tidyverse)
df |>
rename_with(.cols = specs$old_name, .fn = \(x) specs$new_name) |>
select(!!!syms(specs$new_name))
#> # A tibble: 4 x 2
#> region gdp_growth
#> <chr> <dbl>
#> 1 USA 8
#> 2 USA 9
#> 3 USA 11
#> 4 USA 10
編輯:
或其他選擇:
map2_dfc(specs$new_name,
specs$old_name,
\(new, old) select(df, !!sym(new) := !!sym(old)))
#> # A tibble: 4 x 2
#> region gdp_growth
#> <chr> <dbl>
#> 1 USA 8
#> 2 USA 9
#> 3 USA 11
#> 4 USA 10
uj5u.com熱心網友回復:
還有兩種與已經提出的方法相似但略有不同的方法。
df %>% select(specs$old_name) %>% setNames(., specs$new_name)
或者
df %>% select(specs$old_name) %>% `colnames<-` (., specs$new_name)
uj5u.com熱心網友回復:
R通過將列與資料框中的值匹配的基本選項,如下所示:
# Select columns
df = df[,2:3]
# Convert to dataframe isntead of tibble
df = as.data.frame(df)
specs = as.data.frame(specs)
names(df)[match(specs[,"old_name"], names(df))] = specs[,"new_name"]
df
#> region gdp_growth
#> 1 USA 8
#> 2 USA 9
#> 3 USA 11
#> 4 USA 10
使用reprex v2.0.2創建于 2022-10-19
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/518233.html
上一篇:洗掉資料框中字串列陣列中的子字串
下一篇:嵌套串列中的分組熊貓資料框
