我正在寻找一种将64个字符字符串(例如“ m_news_ed_”)列表添加到一系列列名称的开始的方法。
addToCol <- c("m_med_ed_","f_edu_vc_","m_gov_barr_","f_mil_gen_" ..."f_heal_stnur_")
因此,列表中的第一项需要添加到第3到11列的列名的开头。然后,第二项需要添加到第13到21列的列名的开头。继续,还有62次。
如果有帮助,则每次列间距为10列。 3:11然后13:21然后23:31。
colRanges <- c(3:11, 13:21, 23:31 ... 633:641)
我当时在考虑for循环,但不太确定如何遍历列范围列表和要添加的字符列表。
我有代码可以处理每组单独的列,但这将需要64行代码
colnames(data)[3:11] <- paste("m_news_ed_",colnames(data[3:11]), sep = "_")
任何建议都将受到欢迎!
答案 0 :(得分:0)
考虑修改您的 add 向量。然后,您可以一键触摸 colnames 向量。
addToCol <- c("m_med_ed_","f_edu_vc_","m_gov_barr_","f_mil_gen_","f_heal_stnur_")
addToCol2 <- "" # start with a blank
for (i in 1:length(addToCol)) {
# add a blank, then the prefix nine times
addToCol2 <- c(addToCol2, "", rep(addToCol[i], times = 9))
}
colnames(data) <- paste0(addToCol2, colnames(data))
这就是你得到的。我认为是对的。
> addToCol2
[1]“”“”“ m_med_ed_”“ m_med_ed_”“ m_med_ed_”
[6]“ m_med_ed_”“ m_med_ed_”“ m_med_ed_”“ m_med_ed_”“ m_med_ed_”
[11]“ m_med_ed_”“”“ f_edu_vc_”“ f_edu_vc_”“ f_edu_vc_”
[16]“ f_edu_vc_”“ f_edu_vc_”“ f_edu_vc_”“ f_edu_vc_”“ f_edu_vc_”
[21]“ f_edu_vc_”“”“ m_gov_barr_”“ m_gov_barr_”“ m_gov_barr_”
[26]“ m_gov_barr_”“ m_gov_barr_”“ m_gov_barr_”“ m_gov_barr_”“ m_gov_barr_”
[31]“ m_gov_barr_”“”“ f_mil_gen_”“ f_mil_gen_”“ f_mil_gen_”
[36]“ f_mil_gen_”“ f_mil_gen_”“ f_mil_gen_”“ f_mil_gen_”“ f_mil_gen_”
[41]“ f_mil_gen_”“”“ f_heal_stnur_”“ f_heal_stnur_”“ f_heal_stnur_”
[46]“ f_heal_stnur_”“ f_heal_stnur_”“ f_heal_stnur_”“ f_heal_stnur_”“ f_heal_stnur_”
[51]“ f_heal_stnur _”
答案 1 :(得分:0)
我们可以使用Map
中的base R
根据两组整数创建序列,然后使用'addToCol'将paste
用
i1 <- unlist(Map(":", seq(3, 633, by = 10), seq(11, 641, by = 10)))
names(data)[i1] <- paste0(rep(addToCol, each = 10), names(data)[i1])