将任意数量的列组合到R中的新表中

时间:2014-03-07 02:34:41

标签: r

我正在阅读一张有3n列的表格。现在我需要创建一个包含n + 1列的新表。

新格式为第一列,第二列为第三列,第五列为第六列。

1.column 2./3. 5./6. 8./9. 11./12.

这样:

a b c d e f g h i

将成为

a b/c e/f h/i

2 个答案:

答案 0 :(得分:3)

cbind(df[, 1], df[, seq(from = 2, to = ncol(df), by = 3)] /
               df[, seq(from = 3, to = ncol(df), by = 3)])

答案 1 :(得分:0)

为了使结果显而易见,以下是data.frame列中i填充i的示例:

d <- data.frame(matrix(rep(1:9, each=5), 5))

#   X1 X2 X3 X4 X5 X6 X7 X8 X9
# 1  1  2  3  4  5  6  7  8  9
# 2  1  2  3  4  5  6  7  8  9
# 3  1  2  3  4  5  6  7  8  9
# 4  1  2  3  4  5  6  7  8  9
# 5  1  2  3  4  5  6  7  8  9

现在我们将取第一列,然后每列(3i-1)除以列(3i),i = 1,2,...所以第一列是(3-1)/(3 ),第二个是(6-1)/(6)等,如你所愿。这是一种方法:

cbind(d[,1], do.call(cbind, lapply(1:(ncol(d)/3), function(i) d[,i*3-1]/d[,i*3])))

要么产生:

#      [,1]      [,2]      [,3]      [,4]
# [1,]    1 0.6666667 0.8333333 0.8888889
# [2,]    1 0.6666667 0.8333333 0.8888889
# [3,]    1 0.6666667 0.8333333 0.8888889
# [4,]    1 0.6666667 0.8333333 0.8888889
# [5,]    1 0.6666667 0.8333333 0.8888889

包含示例矩阵中的(1,2 / 3,5 / 6,8 / 9),验证它是否符合我们的要求。