【问题标题】:Adding a header to columns based on the values of rows根据行的值向列添加标题
【发布时间】:2019-04-27 18:48:55
【问题描述】:

我有以下不同的数据框:

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)。

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

【问题讨论】:

  • 一般来说最好不要使用数值列标题。试试看:make.names(names(df1))

标签: r dataframe


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-05
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多