在矩阵

时间:2015-12-18 10:52:32

标签: r matrix

我有几个文件具有以下结构:

data <- matrix(c(1:100000), nrow=1000, ncol=100)

前500行是X坐标,最后500行是几个对象轮廓的Y坐标。行#1(X)和行501(Y)对应于同一对象的坐标。我需要:

  • 转置整个矩阵并进行排列,所以现在第1行是第1列,第501行是第2列,在连续列中有成对的x,y坐标。第2行和第502行应位于上一个对象数据下方的第1列和第2列中。
  • 理想情况下,
  • 有一个包含文件名信息的额外列。

感谢。

3 个答案:

答案 0 :(得分:0)

更简单的版本:

转置矩阵,然后使用列索引和子集创建一个向量:

mat <- matrix(1:100, nrow = 10)
mat2 <- t(mat)
cols <- unlist(lapply(1:(nrow(mat2)/2), function(i) c(i, i+nrow(mat2)/2)))
mat3 <- mat2[,cols]

然后将其设为如下数据框。

您可以将由nrow / 2分隔的行对进行子集化,使它们成为2列矩阵,然后cbind将它们全部:

df <- as.data.frame(do.call(cbind, lapply(1:(nrow(mat)/2), function(i) {
  matrix(mat[c(i, nrow(mat)/2 + i),], ncol = 2, byrow = TRUE)
})))
df
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 fname
# 1   1  6  2  7  3  8  4  9  5  10     a
# 2  11 16 12 17 13 18 14 19 15  20     e
# 3  21 26 22 27 23 28 24 29 25  30     e
# 4  31 36 32 37 33 38 34 39 35  40     o
# 5  41 46 42 47 43 48 44 49 45  50     y
# 6  51 56 52 57 53 58 54 59 55  60     q
# 7  61 66 62 67 63 68 64 69 65  70     v
# 8  71 76 72 77 73 78 74 79 75  80     b
# 9  81 86 82 87 83 88 84 89 85  90     v
# 10 91 96 92 97 93 98 94 99 95 100     y

然后根据需要添加新列,因为它现在是一个数据帧:

df$fname <- sample(letters, nrow(df), TRUE)

答案 1 :(得分:-1)

怎么样?
n <- 500
df <- data.frame(col1 = data[1:n, ],
                 col2 = data[(nrow(data) - 500):nrow(data), ],
                 fileinfo = "this is the name of the file...")

答案 2 :(得分:-1)

尝试大卫的答案,但这样:

n <- 500
df <- data.frame(col1 = data[1:n, ],
                 col2 = data[(nrow(data) - (n-1)):nrow(data), ],
                 fileinfo = "this is the name of the file...")