如何使用管道分割两列。 (点)参考

时间:2017-10-23 13:58:56

标签: r

问题:我有一组数据框,其数字列具有不同的列名。列每次都处于相同的位置。当数据框MatA具有名为iBAQ.MatA.0130的列时,df YoungA具有名为iBAQ.YoungA.0130的列。我想将第11列除以第8列。它们始终位于相同的位置,因此MatA[9]相当于YoungA[9]

我正在使用dplyr来管理一堆命令,如果我不必手动编辑带有更新变量名的很多行,我会很高兴。这就是我想使用.引用原始数据框的原因。 但是,这会导致错误的输出,其中创建了许多相同的列,如下面的最小示例所示:

> library(dplyr)
> Data <- data.frame(
    X = sample(1:10),
    Y = sample(1:10)
)


> Data2 <- Data %>%
    mutate(ratio = X/Y)

> Data3 <- Data %>%
    mutate(ratio = Data$X/Data$Y)

> Data2, Data3
    X  Y     ratio
1   8  1 8.0000000
2   1  6 0.1666667
3   5 10 0.5000000
4   3  8 0.3750000
5   2  3 0.6666667
6  10  4 2.5000000
7   6  9 0.6666667
8   7  5 1.4000000
9   9  7 1.2857143
10  4  2 2.0000000

输出是我想要的,但是这种方法需要手动调整每个新数据帧的每个变量名称。

尝试不同的划分方式,但按位置引用列,而不是ID仅在未在mutate函数中使用时才起作用。

> Data[1]/Data[2]

           X
1  8.0000000
2  0.1666667
3  0.5000000
4  0.3750000
5  0.6666667
6  2.5000000
7  0.6666667
8  1.4000000
9  1.2857143
10 2.0000000

> Data4 <- Data %>%
    mutate(ratio = Data[1]/Data[2])

> Data5 <- Data %>%
    mutate(ratio = .[1] / . [2])

> Data4, Data5
    X  Y    ratio.    ratio.    ratio.    ratio.    ratio.    ratio.    ratio.    ratio.    ratio.    ratio.
1   8  1 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000
2   1  6 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
3   5 10 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000
4   3  8 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000
5   2  3 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667
6  10  4 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000
7   6  9 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667
8   7  5 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000
9   9  7 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143
10  4  2 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000

我的目标是以Data5的命名结束,因为这是最容易适应几个不同的数据帧,具有相同的布局但不同的变量和数据帧名称。我也很高兴任何想法如何以不同的方式表达这个简单的部门,所以它不会破坏。

谢谢!

1 个答案:

答案 0 :(得分:0)

我发现这有效:

Data6 <- Data %>%
    mutate(ratio = .[,1] / .[,2])

显然,在管道参数之外引用列的工作方式与内部不同。

我不会将此作为其他人的参考删除。