我正在寻找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,然后继续删除我不感兴趣的列。我不能重命名列。
感谢您的帮助!
答案 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")))