R 按变量名循环
我想通过变量名创建for循环 每次,我都计算两个变量之间的最大值,并在dataR 按变量名循环,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
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循环不太熟悉。但是你为什么想要循环呢?