【问题标题】:Rename a range of columns in a dataframe重命名数据框中的一系列列
【发布时间】:2018-05-11 17:06:48
【问题描述】:

我正在尝试重命名数据框中的一系列列,以便它们具有 [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)

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

【问题讨论】:

  • 你想要names(df)[1:5] &lt;- paste0("V", 1:5)吗?
  • 这行得通,@Nate。非常简单。谢谢。

标签: r dataframe


【解决方案1】:

如果您有不同数量的列和/或想要%&gt;%,您可以使用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

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

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

【讨论】:

    猜你喜欢
    • 2018-08-16
    • 2012-08-25
    • 2018-02-07
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多