1

我有以下数据框:

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

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

非常感谢您提前

4

1 回答 1

2

好吧,细节取决于您的数据框的特定属性,这在您给出的示例中并不明显。例如,您指定碱基应该相似,但只有一个碱基“a”。也不清楚这些变量的顺序是否总是相同的。

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

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

pmax(df1,df2)

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

于 2013-04-26T11:29:43.247 回答