虽然这很容易用碱R或做setnames in data.table或rename_在dplyr0.5.由于rename_不推荐使用,我无法在dplyr0.6.0中找到一种简单的方法.
以下是一个例子.我想col.from用以下相应的值替换列名col.to:
col.from <- c("wt", "hp", "vs")
col.to <- c("foo", "bar", "baz")
df <- mtcars
head(df, 2)
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> Mazda RX4 21 6 160 110 3.9 2.620 16.46 0 1 4 4
#> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
Run Code Online (Sandbox Code Playgroud)
预期产量:
names(df)[match(col.from, names(df))] <- col.to
head(df, …Run Code Online (Sandbox Code Playgroud) 我的数据如下所示:
#> Artist Album Year
#> 1 Beatles Sgt. Pepper's 1967
#> 2 Rolling Stones Sticky Fingers 1971
Run Code Online (Sandbox Code Playgroud)
我的问题应该很简单。我试图只使用rename_if以字母“A”开头的列作为前缀。所以我想要的输出是:
#> df1_Artist df1_Album Year
#> 1 Beatles Sgt. Pepper's 1967
#> 2 Rolling Stones Sticky Fingers 1971
Run Code Online (Sandbox Code Playgroud)
您可以看到不应以“年份”为前缀。
这是我的尝试,但效果不佳。我使用starts_with不正确吗?我应该试着把它分成两行,这样我才能更清楚地理解它吗?我还在学习 purrr 风格的函数,所以它对我来说并不总是很直观。
df1 %>% rename_if(starts_with("A"), .funs = ~ paste0(df1, .))
#> Error in df1 %>% rename_if(starts_with("A"), .funs = ~paste0(df1, .)): could not find function "%>%"
Run Code Online (Sandbox Code Playgroud)
数据输入代码:
df1 <- data.frame(stringsAsFactors=FALSE,
Artist = c("Beatles", "Rolling Stones"),
Album = c("Sgt. Pepper's", …Run Code Online (Sandbox Code Playgroud)