我有几个文件具有以下结构:
data <- matrix(c(1:100000), nrow=1000, ncol=100)
前500行是X坐标,最后500行是几个对象轮廓的Y坐标。行#1(X)和行501(Y)对应于同一对象的坐标。我需要:
感谢。
答案 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...")