将字符列表添加到特定列范围内的列名开头

时间:2018-06-29 13:36:03

标签: r

我正在寻找一种将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 = "_")

任何建议都将受到欢迎!

2 个答案:

答案 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])