将一列数据框重命名为数字(在R中)

时间:2014-02-26 13:56:20

标签: r numbers dataframe

我正在寻找10个不同的跑步者,跑10圈。对于每个跑步者,每圈后,我有总的使用时间。为简单起见,我们假设数据框如下所示:

> data<-data.frame(runner=c(1:10),lap1=c(1:10),lap2=c(2:11),...,lap10=c(10:20))

单圈时间没有任何意义,这仅仅是为了这个例子。

现在,我正在创建一个函数,其中函数的一个参数是圈数c:

> func<-function(a,b,c,...) {  }

参数a和b以及函数参数的list (...)与我的问题无关,但是圈数c是。当我使用参数c调用我的函数时,它需要是1到10之间的数字。

现在,当我用一些参数c调用我的函数时,例如c = 4,我想删除名为lap1, lap2, lap3, lap5,...,lap10的列。所以基本上我需要R来识别参数c等于4,然后继续删除我不感兴趣的列。我不能重命名列。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您可以使用paste0将字符串和数字组合到新字符串中:

num <- 4

s <- paste0("lap", num)
# [1] "lap4"

现在,您可以删除除相应列之外的所有列:

data <- data[s]

答案 1 :(得分:1)

好的,所以评论失控了,这是我的回答:

getLapData <- function(data, c) data[c(1, grep(paste0("Lap", c, "_"), names(data)))]
getLapData(data, 1)

产地:

#       Runner Lap1_test Lap1_real
# 1   Runner 1      2.93      2.19
# 2   Runner 2      2.73      2.58
# 3   Runner 3      1.88       2.2
# 4   Runner 4      1.38      1.06
# 5   Runner 5      1.16      1.79
# 6   Runner 6      2.17      1.21
# 7   Runner 7      1.14      1.05
# 8   Runner 8      2.06      2.68
# 9   Runner 9      1.94      1.65
# 10 Runner 10       1.1      1.59

以下是我使用的数据:

data <- as.data.frame(cbind(runner=paste("Runner", 1:10), replicate(20, round(runif(10, 1, 3), 2))))
names(data) <- c("Runner", paste0("Lap", rep(1:10, each=2), c("_test", "_real")))