R:在另一个表中定义的数据帧列上应用函数

时间:2016-10-25 19:14:02

标签: r

我有一个如下所示的数据框(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"))

任何帮助将不胜感激!感谢

2 个答案:

答案 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很重要......