A B C D E F
[1,] 187 174 183 115 101 104
[2,] 451 166 177 842 101 133
[3,] 727 171 187 12803 98 134
[4,] 1532 181 196 730 98 108
[5,] 4139 188 214 20358 105 159
[6,] 689 185 211 1633 110 162
[7,] 1625 184 195 2283 109 114
[8,] 771 181 190 904 105 110
[9,] 950 177 190 1033 106 112
[10,] 703 180 191 463 106 110
[11,] 2052 178 188 2585 100 105
[12,] 1161 178 187 2874 99 110
[13,] 214 175 184 173 98 110
[14,] 473 184 191 971 104 111
[15,] 756 185 193 14743 107 114
我有一个类似于上述数据的数据集。 如何根据下一列和前一列之间的数字生成所有比率的矩阵?
B/A C/B D/C E/D F/E
[1,] 174/187 183/174 115/183 101/115 104/101
[2,]
[3,]
[4,]
[5,]
[6,]
...
答案 0 :(得分:1)
来自ping的建议,但针对数据框列的子集进行了调整(意味着我所做的就是删掉逗号)。
new <- df[-1] / df[-length(df)]
colnames(new) <- paste(names(df)[-1], names(df)[-length(df)], sep = "/")
head(new)
# B/A C/B D/C E/D F/E
# 1 0.93048128 1.051724 0.6284153 0.878260870 1.029703
# 2 0.36807095 1.066265 4.7570621 0.119952494 1.316832
# 3 0.23521320 1.093567 68.4652406 0.007654456 1.367347
# 4 0.11814621 1.082873 3.7244898 0.134246575 1.102041
# 5 0.04542160 1.138298 95.1308411 0.005157678 1.514286
# 6 0.26850508 1.140541 7.7393365 0.067360686 1.472727
如果您可能希望对数据应用多个功能,也可以执行
Fun <- function(...) list(...)
Fun(`/`)[[1]](df[-1], df[-length(df)])