我有一个如下所示的数据框(df):
A B C D E F G H
a 1 2 3 4 5 3 4 2
b 3 4 5 5 4 5 5 4
c 1 4 6 7 9 6 7 4
d 2 4 5 7 8 5 7 4
e 2 2 4 5 7 4 5 2
我想基于这样的表来计算不同列的比率,这表示哪个列需要是分子和分母:
num denom
A E
B G
F C
H D
因此,例如输出中的第一列将是A列除以E列。
输出看起来像这样(我想保留分子的列名):
A B F H
a 0.2 0.5 1 0.5
b 0.75 0.8 1 0.8
c 0.111111111 0.571428571 1 0.571428571
d 0.25 0.571428571 1 0.571428571
e 0.285714286 0.4 1 0.4
我希望我这样做是可以理解的,这是原始表格的输入:
structure(list(A = c(1L, 3L, 1L, 2L, 2L), B = c(2L, 4L, 4L, 4L,
2L), C = c(3L, 5L, 6L, 5L, 4L), D = c(4L, 5L, 7L, 7L, 5L), E = c(5L,
4L, 9L, 8L, 7L), F = c(3L, 5L, 6L, 5L, 4L), G = c(4L, 5L, 7L,
7L, 5L), H = c(2L, 4L, 4L, 4L, 2L)), .Names = c("A", "B", "C",
"D", "E", "F", "G", "H"), class = "data.frame", row.names = c("a",
"b", "c", "d", "e"))
任何帮助将不胜感激!感谢
答案 0 :(得分:3)
使用dplyr::transmute()
library(dplyr)
df %>% transmute(A=A/E, B=B/G, F=F/C, H=H/D)
# A B F H
#1 0.2000000 0.5000000 6.00 0.5000000
#2 0.7500000 0.8000000 6.25 0.8000000
#3 0.1111111 0.5714286 10.50 0.5714286
#4 0.2500000 0.5714286 8.75 0.5714286
#5 0.2857143 0.4000000 10.00 0.4000000
答案 1 :(得分:1)
我们走了:
mdf <- data.frame(num=c("A", "B", "F", "H"), denom=c("E", "G", "C", "D"), stringsAsFactors = F)
df_num <- df[, mdf$num]
df_denom <- df[, mdf$denom]
df_num/df_denom
stringAsFactors = F
很重要......