我有以下数据框:
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
如何自动执行此任务? 我绞尽脑汁想要写一个没有任何成功的循环。
非常感谢您提前
答案 0 :(得分:2)
嗯,详细信息取决于数据框的特定属性,这些属性在您提供的示例中并不明显。例如,您指定base应该类似,但只有一个基数“a”。还不清楚这些变量的顺序是否总是相同的。
无论如何,对于您当前的示例,以下方法可能有效:
df1 <- df[,grep("aR\\..",colnames(df))]
df2 <- df[,grep("aL\\..",colnames(df))]
pmax(df1,df2)
您可以通过以下方式将相同的逻辑扩展到一般情况:(1)使正则表达式更复杂(例如包括其他基数)和(2)通过对列向量进行排序(如果需要),以实现所需的相同顺序pmax()
功能。