我正在阅读一张有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
答案 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),验证它是否符合我们的要求。