R 中的循环中的 rbind
rbind in a loop in R
我有 n
data.frame,我想将其与声誉结合,我选择了其中的两个。
假设我有三个 data.frame,名为 data1
、data2
和 data3
。我想将它们与 rbind
结合起来,所以我有:data1data2
、data1data3
、data2data1
、data2data3
、data3data1
和 data3data2
.
而不是写作:
data1data2 <- rbind(data1, data2)
...
data3data2 <- rbind(data3, data2)
有没有一种方法可以用 R 中的循环来做到这一点?
此代码将构建数据帧的所有组合rbind
一次 2 个。
for (i in 1:n) {
for (j in 1:i) {
if(i==j) { next }
df_first = paste0("data",i)
df_second = paste0("data",j)
expr_rbind = paste0("rbind(",df_first,",",df_second,")")
expr_store_as = paste0(df_first,df_second)
expr_final = paste0(expr_store_as," = ",expr_rbind)
eval(parse(text=expr_final))
}
}
要获得排列而不是组合,请将内循环中 j
的循环从 1 到 n
更改为 1 到 i
。
你可以这样做:
data1 <- BOD; data1$demand <- data1$demand +100
data2 <- BOD; data2$demand <- data2$demand +200
data3 <- BOD; data3$demand <- data3$demand +300
L <- list(data1, data2, data3)
combn(L, 2, simplify = FALSE, FUN=function(x) list(rbind(x[[1]], x[[2]]), rbind(x[[2]], x[[1]])))
或(展平列表):
R <- combn(L, 2, simplify = FALSE, FUN=function(x) list(rbind(x[[1]], x[[2]]), rbind(x[[2]], x[[1]])))
do.call(c, R)
我有 n
data.frame,我想将其与声誉结合,我选择了其中的两个。
假设我有三个 data.frame,名为 data1
、data2
和 data3
。我想将它们与 rbind
结合起来,所以我有:data1data2
、data1data3
、data2data1
、data2data3
、data3data1
和 data3data2
.
而不是写作:
data1data2 <- rbind(data1, data2)
...
data3data2 <- rbind(data3, data2)
有没有一种方法可以用 R 中的循环来做到这一点?
此代码将构建数据帧的所有组合rbind
一次 2 个。
for (i in 1:n) {
for (j in 1:i) {
if(i==j) { next }
df_first = paste0("data",i)
df_second = paste0("data",j)
expr_rbind = paste0("rbind(",df_first,",",df_second,")")
expr_store_as = paste0(df_first,df_second)
expr_final = paste0(expr_store_as," = ",expr_rbind)
eval(parse(text=expr_final))
}
}
要获得排列而不是组合,请将内循环中 j
的循环从 1 到 n
更改为 1 到 i
。
你可以这样做:
data1 <- BOD; data1$demand <- data1$demand +100
data2 <- BOD; data2$demand <- data2$demand +200
data3 <- BOD; data3$demand <- data3$demand +300
L <- list(data1, data2, data3)
combn(L, 2, simplify = FALSE, FUN=function(x) list(rbind(x[[1]], x[[2]]), rbind(x[[2]], x[[1]])))
或(展平列表):
R <- combn(L, 2, simplify = FALSE, FUN=function(x) list(rbind(x[[1]], x[[2]]), rbind(x[[2]], x[[1]])))
do.call(c, R)