我的数据如下:
#> Artist Album Year
#> 1 Beatles Sgt. Pepper's 1967
#> 2 Rolling Stones Sticky Fingers 1971
我的问题应该很简单。我正在尝试使用rename_if
仅对以字母“ A”开头的列添加前缀。所以我想要的输出是:
#> df1_Artist df1_Album Year
#> 1 Beatles Sgt. Pepper's 1967
#> 2 Rolling Stones Sticky Fingers 1971
您可以看到“年份”不应加前缀。
这是我的尝试,但效果不佳。我使用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 "%>%"
数据输入代码:
df1 <- data.frame(stringsAsFactors=FALSE,
Artist = c("Beatles", "Rolling Stones"),
Album = c("Sgt. Pepper's", "Sticky Fingers"),
Year = c(1967, 1971)
)
答案 0 :(得分:4)
rename_if
期望逻辑向量作为谓词函数。 starts_with
根据变量名称选择变量。使用基startsWith
代替,它返回基于前缀的逻辑向量
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
或者,如果您想留在tidyverse
中,也可以使用str_detect
df1 %>% rename_if(stringr::str_detect(names(.), "^A"), ~paste0("df1_", .))
要使用starts_with
,我们可以使用具有rename_at
参数的vars
。
df1 %>% rename_at(vars(starts_with("A")), ~paste0("df1_", .))
答案 1 :(得分:1)
我们可以使用
library(tidyverse)
df1 %>%
rename_at(vars(starts_with("A")), ~ str_c("df1_", .))
# df1_Artist df1_Album Year
#1 Beatles Sgt. Pepper's 1967
#2 Rolling Stones Sticky Fingers 1971