我有一個數據集,其中包括一堆與我要製作成各種前綴後綴的變量。數據集還包含一些沒有任何後綴的變量。喜歡的東西:setNames後綴前綴
df <- data.frame(
home_loc = rnorm(5),
work_loc = rnorm(5),
x1 = rnorm(5),
walk_act = rnorm(5),
bike_act = rnorm(5),
x2 = rnorm(5),
happy_yest = rnorm(5),
sad_yest = rnorm(5)
)
我能想出以下解決方案:
suff_to_pre <- function(x, suffix, prefix) {
for (i in seq_along(names(x))) {
if (grepl(suffix, names(x)[i])) {
names(x)[i] <- sub(suffix, "", names(x)[i])
names(x)[i] <- paste0(prefix, names(x)[i])
}
}
names(x)
}
names(df) <- suff_to_pre(df, suffix = "_loc", prefix = "loc_")
names(df) <- suff_to_pre(df, suffix = "_act", prefix = "act_")
names(df) <- suff_to_pre(df, suffix = "_yest", prefix = "yest_")
names(df)
[1] "loc_home" "loc_work" "x1" "act_walk" "act_bike" "x2" "yest_happy"
[8] "yest_sad"
但是,我感覺不很滿意。具體來說,我真的很喜歡使用dplyr獲得相同結果的方法。 I found this和this,該拉去:
a <- df %>%
select(ends_with("_loc")) %>%
setNames(sub("_loc", "", names(.))) %>%
setNames(paste0("loc_", names(.)))
b <- df %>%
select(ends_with("_act")) %>%
setNames(sub("_act", "", names(.))) %>%
setNames(paste0("act_", names(.)))
c <- df %>%
select(ends_with("_yest")) %>%
setNames(sub("_yest", "", names(.))) %>%
setNames(paste0("yest_", names(.)))
df <- cbind(
select(df, x1, x2), a, b, c
)
這顯然是不理想的。我希望有人提出使用dplyr更優雅的解決方案。
編輯
@docendo discimus和@ zx8754了真正有用的答案,但我應該更加明確。我也有包含下劃線的變量,但不是我想更改爲前綴的後綴。
爲例(見下free_time):
df <- data.frame(
home_loc = rnorm(5),
work_loc = rnorm(5),
x_1 = rnorm(5),
walk_act = rnorm(5),
bike_act = rnorm(5),
x_2 = rnorm(5),
happy_yest = rnorm(5),
sad_yest = rnorm(5),
free_time = rnorm(5)
)
意想不到的答案用這個,但是我本來應該更明確。我也有包含下劃線的變量,但不是我想更改爲前綴(例如,free_time)的後綴。 –
這個答案非常明確且有幫助。謝謝。顯然我需要學習正則表達式。 –