循环分组数据列

时间:2016-11-23 03:48:17

标签: r

我对R来说比较新。我一直试图通过for()参数进行循环试验。

我有遵循这种模式的虚拟数据集:

Date    EUR HIGH    EUR LOW EUR CLOSE   JPY CURNCY  JPY LOW JPY CLOSE   GBP CURNCY  GBP CURNCY  GBP CURNCY
8/30/2016   1.12    1.12    1.12    102.56  101.76  102.50  1.31    1.31    1.31
8/29/2016   1.12    1.12    1.12    102.39  101.84  101.92  1.32    1.32    1.32
8/28/2016   1.13    1.12    1.12    101.94  100.06  101.84  1.33    1.33    1.33
8/27/2016   1.13    1.12    1.12    101.94  100.06  101.84  1.33    1.33    1.33
8/26/2016   1.13    1.12    1.12    101.94  100.06  101.84  1.33    1.33    1.33
8/25/2016   1.13    1.13    1.13    100.62  100.30  100.53  1.33    1.33    1.33
8/24/2016   1.13    1.12    1.13    100.61  100.10  100.45  1.33    1.33    1.33
8/23/2016   1.14    1.13    1.13    100.39  99.94   100.24  1.32    1.32    1.32
8/22/2016   1.13    1.13    1.13    100.93  100.21  100.33  1.32    1.32    1.32
8/21/2016   1.14    1.13    1.13    100.46  99.88   100.22  1.32    1.32    1.32
8/20/2016   1.14    1.13    1.13    100.46  99.88   100.22  1.32    1.32    1.32
8/19/2016   1.14    1.13    1.13    100.46  99.88   100.22  1.32    1.32    1.32

由于我有各种Excel文件遵循这种模式组织(即:价格低,高和关闭),我试图创建一个合并三个变量(低,高,关闭)和约会到表。这背后的想法是,我希望为每种货币生成一个单独的表,以便可以对每种货币进行单独的分析,然后让它循环通过所有货币,如果这是有道理的。

理想情况下,我希望R生成一个表格,如:

Date   Euro High   Euro Close  Euro low
1/1    1.15        1.13        1.12
1/2    1.15        1.13        1.12
1/3    1.15        1.13        1.12

然后我会让R做一些基本分析,然后让它重复下一个变量(GBP,JPY)的过程。我在分组部分遇到一些麻烦。

我的代码非常错误(也可能是一个主要的眼睛),但它可能有助于指出改进/错误:

Data.Prep = function(x){ 
for(i in seq(1))
 {
   dates = as.Date(x[,i], format="%m/%d/$Y")
 }

for(i in seq(2, length(x)))
 {
   x[,i] = as.numeric(as.character(x[,i]))
 }

for(i in seq(2, length(x), 3))  
 {
  x1 = x[i:(i-1)]
 }

}

x1返回:

   GBP.CURNCY JPY.CLOSE
1      1.3120    102.50
2      1.3172    101.92
3      1.3279    101.84
4      1.3279    101.84
5      1.3279    101.84
6      1.3264    100.53
7      1.3273    100.45
8      1.3211    100.24
9      1.3157    100.33
10     1.3185    100.22
11     1.3185    100.22
12     1.3185    100.22

1 个答案:

答案 0 :(得分:3)

您可以这样做,但您应该使用哪种货币。在这里,我提供一个货币矢量,然后检索列索引。然后我们可以做一个标准的子设置。

vec=c('EUR', 'JPY', 'GBP' )
i=sapply(vec, function(y) grep(y,names(x)), USE.NAMES = F)
apply(i,2, function(i) x[c(1,i)] )