为变量对循环pmax()

时间:2013-04-26 10:32:54

标签: r

我有以下数据框:

varnames<-c( "aR.0", "aL.0", "aR.1", "aL.1", "aR.3", "aL.3")

a <-matrix (c(1,2,3,4, 5, 6), 2, 6)

colnames (a)<-varnames

df<-as.data.frame (a)


 a
    aR.0 aL.0 aR.1 aL.1 aR.3 aL.3
[1,]    1    3    5    1    3    5
[2,]    2    4    6    2    4    6

我需要在数据框中添加包含变量对的最大值的向量,其中包含:

  • 类似的基础(“a”和“a”)

  • 类似的后缀(“0”和“0”,“1”和“1”,“3”和“3”)

  • 但后缀(R和L)之前的最后一个字母不同。

在几行中看起来像:

 df$max.a.0 <- pmax(df [,"aR.0"], df[,"aL.0"])
 df$max.a.1<-pmax(df [,"aR.1"], df[,"aL.1"])
 df$max.a.3<- pmax(df [,"aR.3"], df[,"aL.3"])

df
    aR.0 aL.0 aR.1 aL.1 aR.3 aL.3 max.a.0 max.a.1 max.a.3
 1    1    3    5    1    3    5       3       5       5
 2    2    4    6    2    4    6       4       6       6

如何自动执行此任务? 我绞尽脑汁想要写一个没有任何成功的循环。

非常感谢您提前

1 个答案:

答案 0 :(得分:2)

嗯,详细信息取决于数据框的特定属性,这些属性在您提供的示例中并不明显。例如,您指定base应该类似,但只有一个基数“a”。还不清楚这些变量的顺序是否总是相同的。

无论如何,对于您当前的示例,以下方法可能有效:

df1 <- df[,grep("aR\\..",colnames(df))]
df2 <- df[,grep("aL\\..",colnames(df))]

pmax(df1,df2)

您可以通过以下方式将相同的逻辑扩展到一般情况:(1)使正则表达式更复杂(例如包括其他基数)和(2)通过对列向量进行排序(如果需要),以实现所需的相同顺序pmax()功能。