R 按变量名循环

R 按变量名循环,r,R,我想通过变量名创建for循环 每次,我都计算两个变量之间的最大值,并在datadf中定义一个新变量。新变量如下所示:var1\u 1,var1\u 2。。。这是我的密码: df=data.frame(matrix(c(1:6), nrow = 2)) colnames(df) = c("x", "y", "z") for(i in length(names(df))-1){ df = df %>% mutate(paste0("var", i, "_", i+1) = max

我想通过变量名创建for循环

每次,我都计算两个变量之间的最大值,并在data
df
中定义一个新变量。新变量如下所示:
var1\u 1
var1\u 2
。。。这是我的密码:

 df=data.frame(matrix(c(1:6), nrow = 2))
 colnames(df) = c("x", "y", "z")

 for(i in length(names(df))-1){
   df = df %>% mutate(paste0("var", i, "_", i+1) = max(names(df)[i], names(df)[i+1]))
}
但是有错误

预期产出:

>df
 x     y     z    var1_2    var1_3   var2_3
 1     3     5      3         5        5
 2     4     6      4         6        6
单程通过基地R

m1 <- sapply(combn(names(df),2, simplify = FALSE), function(i) do.call(pmax, df[i]))
nms <- combn(ncol(m1), 2, function(i) paste0('Var', i[1], '_', i[2]))

cbind(df, setNames(data.frame(m1), nms))
#  x y z Var1_2 Var1_3 Var2_3
#1 1 3 5      3      5      5
#2 2 4 6      4      6      6

m1如果您确实想使用循环,可以尝试:

 ind<-combn(3,2)
 for(i in 1:dim(df)[2]){
    i <- ind[,i]
    name <- paste0("var", i[1], "_", i[2])
    val <- names(df)[i[ifelse(sum(df[,i[1]]) > sum(df[,i[2]]),1,2)]]
    df <- mutate_(df, .dots= setNames(list(val),name))
}

IND是否可能使用循环而不是sapply?事实上,我只想使用循环。对for循环不太熟悉。但是你为什么想要循环呢?