2016-06-16 2 views
1

Мой кадр данных состоит из финансовых данных временных рядов от многих публичных компаний. Я намеренно устанавливал веса компаний в качестве заголовков столбцов при очистке данных, а также рассчитывал возврат логов для каждого из них, чтобы рассчитать взвешенные доходности на следующем шаге.Преобразование заголовков столбцов в новые столбцы

Вот пример. Есть четыре компании: A, B, C и D, а их соответствующие веса в портфеле - 0,4, 0,3, 0,2, 0,1 отдельно. Таким образом, текущий набор данных выглядит следующим образом:

df1 <- data.frame(matrix(vector(),ncol=9, nrow = 4)) 
colnames(df1) <- c("Date","0.4","0.4.Log","0.3","0.3.Log","0.2","0.2.Log","0.1","0.1.Log") 
df1[1,] <- c("2004-10-29","103.238","0","131.149","0","99.913","0","104.254","0") 
df1[2,] <- c("2004-11-30","104.821","0.015","138.989","0.058","99.872","0.000","103.997","-0.002") 
df1[3,] <- c("2004-12-31","105.141","0.003","137.266","-0.012","99.993","0.001","104.025","0.000") 
df1[4,] <- c("2005-01-31","107.682","0.024","137.08","-0.001","99.782","-0.002","105.287","0.012") 
df1 
     Date  0.4 0.4.Log  0.3 0.3.Log 0.2 0.2.Log  0.1 0.1.Log 
1 2004-10-29 103.238  0 131.149  0 99.913  0 104.254  0 
2 2004-11-30 104.821 0.015 138.989 0.058 99.872 0.000 103.997 -0.002 
3 2004-12-31 105.141 0.003 137.266 -0.012 99.993 0.001 104.025 0.000 
4 2005-01-31 107.682 0.024 137.08 -0.001 99.782 -0.002 105.287 0.012 

Я хочу, чтобы создать новые столбцы, содержащие веса компании, так что я могу рассчитывать взвешенные возвращается в моем следующем шаге:

 Date  0.4 0.4.W 0.4.Log  0.3 0.3.W 0.3.Log 0.2 0.2.W 0.2.Log  0.1 0.1.W 0.1.Log 
1 2004-10-29 103.238 0.400 0.000 131.149 0.300 0.000 99.913 0.200 0.000 104.254 0.100 0.000 
2 2004-11-30 104.821 0.400 0.015 138.989 0.300 0.058 99.872 0.200 0.000 103.997 0.100 -0.002 
3 2004-12-31 105.141 0.400 0.003 137.266 0.300 -0.012 99.993 0.200 0.001 104.025 0.100 0.000 
4 2005-01-31 107.682 0.400 0.024 137.080 0.300 -0.001 99.782 0.200 -0.002 105.287 0.100 0.012 
+1

Именование колонок вещей, начиная с цифр, сделает вашу жизнь жалким беспорядком обратных шагов. – alistaire

+0

И работа в широком формате данных - тоже жалкий беспорядок. Это было бы тривиально, если бы ваши данные были в длинном формате с одним столбцом для даты, одним столбцом для веса, одним столбцом для возврата и одним красивым столбцом для любых значений в столбцах '0.4',' 0,3', ... в вашем результате. – Gregor

+0

[См. Мой ответ здесь из более раннего сегодняшнего дня] (http://stackoverflow.com/q/37865643/903061) для некоторых хороших преобразований с широкими в длинные, разделяющие переменные, которые неправильно помещаются внутри имен столбцов. – Gregor

ответ

1

Мы можем попробовать

v1 <- grep("^[0-9.]+$", names(df1), value = TRUE) 
df1[paste0(v1, ".w")] <- as.list(as.numeric(v1)) 
Смежные вопросы