问题:我有一组数据框,其数字列具有不同的列名。列每次都处于相同的位置。当数据框MatA
具有名为iBAQ.MatA.01
到30
的列时,df YoungA
具有名为iBAQ.YoungA.01
到30
的列。我想将第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的命名结束,因为这是最容易适应几个不同的数据帧,具有相同的布局但不同的变量和数据帧名称。我也很高兴任何想法如何以不同的方式表达这个简单的部门,所以它不会破坏。
谢谢!
答案 0 :(得分:0)
我发现这有效:
Data6 <- Data %>%
mutate(ratio = .[,1] / .[,2])
显然,在管道参数之外引用列的工作方式与内部不同。
我不会将此作为其他人的参考删除。