【发布时间】:2018-05-14 10:09:00
【问题描述】:
我正在使用 R,并且我有一个名为 df 的数据框,它有 (n*P) 行和 N 列。
C1 C2 ... CN-1 CN
1-1 100 36 ... 136 76
1-2 120 -33 ... 87 42
1-3 150 14 ... 164 24
:
1-n 20 36 ... 136 76
2-1 109 26 ... 166 87
2-2 -33 87 ... 42 24
2-3 100 36 ... 136 76
:
2-n 100 36 ... 136 76
:
P-1 150 14 ... 164 24
P-2 100 36 ... 765 76
P-3 150 14 ... 164 94
:
P-n 10 26 ... 106 76
我想将此数据框转换为具有 n 行和 (N*P) 列的数据框。新的数据框df.new 应该是这样的
C1-1 C2-1 ... CN-1-1 CN-1 C1-2 C2-2 ... CN-1-2 CN-2 ... C1-P C2-P ... CN-1-P CN-P
R1 100 36 ... 136 76 20 36 ... 136 76 ... 150 14 ... 164 24
R2 120 -33 ... 87 42 109 26 ... 166 87 ... 100 36 ... 765 76
:
:
Rn 20 36 ... 136 76 100 36 ... 136 76 ... 10 26 ... 106 76
也就是说df.new的前N列是df的第1-1、2-1、3-1、...、P-1行的rbind。 df.new 的下 N 列是 df 的第 1-2、2-2、3-2、...、P-2 行的 rbind。一直到df.new 的最后 N 列将由行 1-n、2-n、3-n、...、P-n 的 df 组成。 (df.new 的 R1 是第 1-1、1-2、...、1-n 行的 cbind。df.new 的 R2 是第 2-1、2-2、...、2-n 行的 cbind .df.new 的 Rn 是 P-1、P-2、...、P-n 行的 cbind。)
n、P 和 N 是变量,因此它们的值取决于具体情况。我尝试使用 for 循环创建 df.new,但效果不佳。
这是我放弃的尝试。
for (j in 1:n) {
df.new <- data.frame(matrix(vector(), 1, dim(df)[2],
dimnames = list(c(), colnames(df))),
stringsAsFactors=F)
for (i in 1:nrow(df)) {
if (i %% n == 0) {
df.new <- rbind(df.new, df[i,])
} else if (i %% n == j) {
df.new <- rbind(df.new, df[i,])
}
}
assign(paste0("df.new", j), df.new)
}
【问题讨论】:
标签: r for-loop dataframe rbind cbind