重命名数据框中的一系列列

时间:2018-05-11 17:06:49

标签: r dataframe

我正在尝试重命名数据框中的一系列列,以便它们具有格式[V1:V5]:

result_df = data.frame(V1 = 1, V2 = 2, V3 = 3, V4 = 4, V5 = 5, colnamethatshouldntberenamed = 6)

如果现有的数据框在其名称的某处有数字范围,那么它相对比较直接(虽然我认为可能有一种方法可以用一行代码而不是两行代码):

df1 = data.frame(X1q = 1, X2q = 2, X3q = 3, X4q = 4, X5q = 5, colnamethatshouldntberenamed = 6)

names(df1) <- gsub("X", "V", names(df1))
names(df1) <- gsub("q", "", names(df1))

但是如果列名具有完全随机的名称呢?

df2 = data.frame(name = 1, col = 2, random = 3, alsorandom = 4, somethingelse = 5, colnamethatshouldntberenamed = 6)

有没有办法一次性重命名所有这些列? (假设它们是数据框中的相邻列,但数据框中可能还有其他列,其名称不需要更改)

1 个答案:

答案 0 :(得分:1)

如果您有不同的列数和/或想要%>%,则可以使用purrr::set_names()

例如:

包含10列的示例数据:

example1 <- data.frame(replicate(10,sample(0:1,5,rep=TRUE)))
example1 
  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1  1  1  0  1  1  1  0  1  0   1
2  0  0  1  0  1  1  1  0  0   1
3  0  0  1  0  0  1  1  1  0   0
4  0  1  0  1  1  0  1  0  0   0
5  1  0  0  1  1  0  1  1  0   1

您可以在seq_along内使用set_names,它会按顺序重命名列(使用管道):

example1 %>% 
    set_names(c(seq_along(example1)))

结果:

 1 2 3 4 5 6 7 8 9 10
1 1 1 0 1 1 1 0 1 0  1
2 0 0 1 0 1 1 1 0 0  1
3 0 0 1 0 0 1 1 1 0  0
4 0 1 0 1 1 0 1 0 0  0
5 1 0 0 1 1 0 1 1 0  1

相同的想法有15列,并使用set_names中的粘贴命名它们:

 example2 <- data.frame(replicate(15,sample(0:1,10,rep=TRUE)))

  example2 %>% 
set_names(c(paste("VarNum", seq_along(example2), sep = "")))

结果

 VarNum1 VarNum2 VarNum3 VarNum4 VarNum5 VarNum6 VarNum7 VarNum8 VarNum9 VarNum10 VarNum11 VarNum12 VarNum13 VarNum14 VarNum15
1       0       1       0       0       0       0       0       1       1        1        1        0        1        0        1
2       1       1       0       0       0       1       0       1       1        0        0        0        1        0        1
3       1       1       0       1       0       1       1       1       1        1        1        0        1        0        1
4       0       0       0       0       1       1       1       1       0        1        1        0        0        0        1
5       1       1       0       1       0       0       1       0       0        1        1        0        0        0        0