Jer*_* K. 5 r rename dplyr purrr tidyverse
我的数据如下所示:
#> 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", "Sticky Fingers"),
Year = c(1967, 1971)
)
Run Code Online (Sandbox Code Playgroud)
rename_if
期望一个逻辑向量作为谓词函数。starts_with
根据名称选择变量。使用 basestartsWith
代替它返回基于前缀的逻辑向量
library(dplyr)
df1 %>% rename_if(startsWith(names(.), "A"), ~paste0("df1_", .))
# df1_Artist df1_Album Year
#1 Beatles Sgt. Pepper's 1967
#2 Rolling Stones Sticky Fingers 1971
Run Code Online (Sandbox Code Playgroud)
或者如果你想留在tidyverse
你也可以使用str_detect
df1 %>% rename_if(stringr::str_detect(names(.), "^A"), ~paste0("df1_", .))
Run Code Online (Sandbox Code Playgroud)
要使用,starts_with
我们可以使用rename_at
which 有vars
参数。
df1 %>% rename_at(vars(starts_with("A")), ~paste0("df1_", .))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2828 次 |
最近记录: |