将列标题转换为新列

时间:2016-06-16 23:11:48

标签: r

我的数据框包含来自许多上市公司的时间序列财务数据。我故意在清理数据时将公司的权重设置为列标题,我还计算了每个权重的日志返回值,以便在下一步计算加权回报。

这是一个例子。有四家公司: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 个答案:

答案 0 :(得分:1)

我们可以尝试

v1 <- grep("^[0-9.]+$", names(df1), value = TRUE)
df1[paste0(v1, ".w")] <- as.list(as.numeric(v1))