我找到了部分帮助的答案,但我无法让完整的代码正常工作。
如果列名在向量列表中,则添加前缀
资料:
data <-
structure(list(ID = c(111L, 222L, 333L),
desc = c("uc1", "uc2", "uc3"),
var1 = c("A", "A", "B"),
var2 = c("B", "B", "C"),
var3 = c("C", "C", "D"),
GENDER = c("F", "M", "M"),
AGE = c(25L, 25L, 24L)),
class = "data.frame", row.names = c(NA, -3L))
#list of demographic variables I need to add a prefix to for modelling
demog = c("GENDER", "AGE")
我想做什么:
如果列名存在于我的人口统计变量列表中,则向列名添加前缀“d”。
我已经按照下面的思路尝试了各种版本,但都没有用。
#following creates errors
colnames(data)[demog[(demog %in% colnames(data))]] <-
paste('d', colnames(data)[demog[(demog %in% colnames(data))]], sep = '_')
data <-
ifelse(names(data) %in% demog, paste0(demog, 'd', sep = '_'), colnames(data))
对于不同的变量分组,我有许多不同的列表,因此无法手动完成。我想要一个所有其他列名都相同但我有“d_GENDER”和“d_AGE”的输出。
非常感谢任何帮助。
我们可以使用
rename_with
。此函数接受 tidy-select
语句来选择要转换的列。 any_off
是这里要使用的那个,因为它接受字符向量,并且只转换匹配的列并忽略其余的列。
library(dplyr)
data |>
rename_with(.cols = any_of(demog),
.fn = ~paste0('d_',.x))
ID desc var1 var2 var3 d_GENDER d_AGE
1 111 uc1 A B C F 25
2 222 uc2 A B C M 25
3 333 uc3 B C D M 24