2014-03-07 35 views
0

我正在閱讀具有3n列的表。現在我需要創建具有n + 1列的新表格。將任意數量的列組合到R中的新表中

新格式將是第一列,接着通過第三列第二分割,然後通過第五第六列劃分..

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 

回答

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

爲了使效果明顯,這裏是在i列裝滿i一個例子data.frame

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)從例如矩陣,驗證它做我們想要的。

相關問題