2017-03-27 9 views
0

異なるセクタのインデックスを持つデータフレーム(抽出用画像を参照)があります。各行は、特定のセクターのインデックスが意味する月です。しかし、指標の代わりに、私は相対的なリターン、すなわち手段 - > ln(月tの指数/月t-1の指数)で作業する必要があります。どのように私は相対的なリターンを含むテーブルに持っているテーブルを転送することは可能ですか?例えば行2 = ln(行2 /行1)などR - データフレーム内の値を変換する方法

何か助けてください!

Data Frame

答えて

0
n <- nrow(df) 
returns = apply(df, 2, function(x) log(x[-1]/x[-n])) 

データ

df = structure(list(TOTXTER = c(2215.83, 2245.72, 2270.89, 2223.7, 
2424.06, 2474.17, 2588.63, 2524.26, 2538.74, 2729.11, 2544.33 
), OILGSER = c(4674.38, 4676.73, 4637.56, 4573.83, 4983.08, 5244.84, 
5449.16, 5301.82, 5637.56, 5941.14, 5485.61), BMATRER = c(1660.95, 
1671.76, 1693.66, 1635.54, 1720.29, 1760.02, 1785.75, 1789.98, 
1789.09, 1887.73, 1716.61), CHMCLER = c(2103.37, 2105.47, 2108.5, 
2020.08, 2086.4, 2133.43, 2202.96, 2177.63, 2142.27, 2274.55, 
2108.15), BRESRER = c(1130.31, 1112.28, 1163.64, 1129.64, 1218.04, 
1262.35, 1271.25, 1296.26, 1280.15, 1331.12, 1110.19), INDUSER = c(1849.7, 
1847.57, 1858.19, 1820.16, 1963.64, 1986.84, 2026.37, 2053.58, 
2036.51, 2185.57, 1959.43), CNSTMER = c(1649.65, 1686.22, 1715.39, 
1670.04, 1774.8, 1808.93, 1786.93, 1799.99, 1844.09, 1928.18, 
1786.66), INDGSER = c(1823.64, 1820.19, 1830.12, 1787.6, 1925.63, 
1956.93, 1999.76, 2018.36, 2018.68, 2164.85, 1967.47), RITDVER = c(1073.32, 
1126.17, 1130.85, 1095.9, 1117.03, 1083.76, 1139.1, 1100.51, 
1120.35, 1138.33, 1125.28)), .Names = c("TOTXTER", "OILGSER", 
"BMATRER", "CHMCLER", "BRESRER", "INDUSER", "CNSTMER", "INDGSER", 
"RITDVER"), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10", "11")) 
+0

あなたの答えをありがとうございました!しかし、私は常にエラーノートを受け取ります:dim(X)は正の長さでなければなりません – Tripleb10

+0

あなたはdfデータか何か別のものを使用していますか? –

+0

私の実際のデータフレームには、30個の列ごとに240個の行が含まれています。データフレームにソリューションを適用する方法がわかりません!申し訳ありませんが、私はこれでかなり新しいです! – Tripleb10

関連する問題