将每行除以不同的数字

时间:2014-11-08 17:44:38

标签: r

我在互联网上看了一眼,但是我找到了我正在寻找的答案,但是它确实存在...

我有一个数据框,我希望将一行中的每个单元格(或任何其他操作)除以它放在数据框的第二列中的值。 因此,从col3到last col的第一行,将每个单元格除以该行的col2值,依此类推每一行。

我已经通过使用For循环解决了这个问题,col2(delta)它现在是一个向量,而col3用来结束它是一个data.frame(mu)。通过使用rbind将结果附加到新数据框。

问题是;我很确定这可以通过使用apply,sapply或类似函数来完成,但是我还没有得到我到目前为止所看到的结果(不像我对循环所做的那样好)。 ¿如何在不使用循环的情况下完成?

我到目前为止一直在使用循环。

简历中。 我想将每个mu除以它自己行的delta值。

for (i in 1:(dim(mu)[1])){
    RA_row <- mu[i,]/delta[i]
    RA <- rbind(RA, RA_row)
    }

transcript  delta   mu_5    mu_15   mu_25   mu_35   mu_45   mu_55   mu_65
1   YAL001C 0.066702720 2.201787e-01    1.175731e-01    2.372506e-01    0.139281317 0.081723456 1.835414e-01    1.678318e-01
2   YAL002W 0.106000180 3.685822e-01    1.326865e-01    2.887973e-01    0.158207858 0.193476082 1.867039e-01    1.776946e-01
3   YAL003W 0.022119345 2.271518e+00    2.390637e+00    1.651997e+00    3.802739732 2.733559839 2.772454e+00    3.571712e+00

由于

1 个答案:

答案 0 :(得分:3)

好像你只想:

mu2 <- mu[-(1:2)]/mu[[2]]
#  same as mu[-(1:2), ]/mu[['delta']]

这应该产生一个逐行的新数据帧。更“危险”的是“分工”。

 mu[-(1:2)] <- mu[-(1:2)]/mu[[2]]

> mu <- data.frame(a=1,b=1:10, c=rnorm(10), d=rnorm(10) )
> mu
   a  b           c           d
1  1  1 -1.91435943  0.45018710
2  1  2  1.17658331 -0.01855983
3  1  3 -1.66497244 -0.31806837
4  1  4 -0.46353040 -0.92936215
5  1  5 -1.11592011 -1.48746031
6  1  6 -0.75081900 -1.07519230
7  1  7  2.08716655  1.00002880
8  1  8  0.01739562 -0.62126669
9  1  9 -1.28630053 -1.38442685
10 1 10 -1.64060553  1.86929062
> (mu2 <- mu[-(1:2)]/mu[[2]])
              c            d
1  -1.914359426  0.450187101
2   0.588291656 -0.009279916
3  -0.554990812 -0.106022792
4  -0.115882600 -0.232340537
5  -0.223184021 -0.297492062
6  -0.125136500 -0.179198716
7   0.298166649  0.142861258
8   0.002174452 -0.077658337
9  -0.142922281 -0.153825205
10 -0.164060553  0.186929062
> (mu[-(1:2)] <- mu[-(1:2)]/mu[[2]] )
> mu
   a  b            c            d
1  1  1 -1.914359426  0.450187101
2  1  2  0.588291656 -0.009279916
3  1  3 -0.554990812 -0.106022792
4  1  4 -0.115882600 -0.232340537
5  1  5 -0.223184021 -0.297492062
6  1  6 -0.125136500 -0.179198716
7  1  7  0.298166649  0.142861258
8  1  8  0.002174452 -0.077658337
9  1  9 -0.142922281 -0.153825205
10 1 10 -0.164060553  0.186929062