根据行的值将标题添加到列

时间:2019-04-27 18:48:55

标签: r dataframe

我有以下不同的数据框:

df1:

Scribe       Reduced    A    5    2.5    3    10
Reader       Reduced    A    9.2  4      12   10
Optimise     Reduced    A    5    5.8    3    12

df2:

Convert      Reduced    A    14    25  
Configure    Reduced    A    14.7  6.8      
Race         Reduced    A    2     6.3

df3:

Abstract     Reduced    A    8    7.5    9    8     4.5    11
Follower     Reduced    A    5.5  6      14   19    6      13.5

我想为列名称为的每个数据框添加标题:

Class      Technique     Algorithm    1   2   3 ....

我的问题不是前三列,而是其余列(整数值)。如您在示例中看到的,这些整数值的列数不同,这使我很难命名这些列(即,从1开始到最后一个值,例如df1中的4)。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

这是为您提供的功能。第一个参数dat是您的数据框。第二个参数chr是前几列的向量名称。

header_fun <- function(dat, chr = c("Class", "Technique", "Algorithm")){
  dat2 <- setNames(dat, c(chr, 1:(ncol(dat) - length(chr))))
  return(dat2)
}

该函数将返回带有已更新标头的新数据帧。

header_fun(df1)
#      Class Technique Algorithm  C1  C2 C3 C4
# 1   Scribe   Reduced         A 5.0 2.5  3 10
# 2   Reader   Reduced         A 9.2 4.0 12 10
# 3 Optimise   Reduced         A 5.0 5.8  3 12

header_fun(df2)
#       Class Technique Algorithm    1    2
# 1   Convert   Reduced         A 14.0 25.0
# 2 Configure   Reduced         A 14.7  6.8
# 3      Race   Reduced         A  2.0  6.3

header_fun(df3)
#      Class Technique Algorithm   1   2  3  4   5    6
# 1 Abstract   Reduced         A 8.0 7.5  9  8 4.5 11.0
# 2 Follower   Reduced         A 5.5 6.0 14 19 6.0 13.5

数据

df1 <- read.table(text = "Scribe       Reduced    A    5    2.5    3    10
Reader       Reduced    A    9.2  4      12   10
                  Optimise     Reduced    A    5    5.8    3    12",
                  header = FALSE, stringsAsFactors = FALSE)

df2 <- read.table(text = "Convert      Reduced    A    14    25  
Configure    Reduced    A    14.7  6.8      
Race         Reduced    A    2     6.3",
                  header = FALSE, stringsAsFactors = FALSE)

df3 <- read.table(text = "Abstract     Reduced    A    8    7.5    9    8     4.5    11
Follower     Reduced    A    5.5  6      14   19    6      13.5",
                  header = FALSE, stringsAsFactors = FALSE)