循环变量名称

时间:2017-03-15 08:19:07

标签: r

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

每次,我计算每两个变量之间的最大值,并在数据df中定义一个新变量。新变量如下所示:var1_1var1_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

2 个答案:

答案 0 :(得分:2)

通过基地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

答案 1 :(得分:1)

如果您真的想使用循环,可以尝试:

 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))
}