将数据帧中的所有数字除以同一数据帧中选定的行和R中相应的列位置

将数据帧中的所有数字除以同一数据帧中选定的行和R中相应的列位置,r,dataframe,divide,R,Dataframe,Divide,我有一个用这个代码生成的数据帧x1 x <- c(1:10) y <- x^3 z <- y-20 s <- z/3 t <- s*6 q <- s*y x1 <- cbind(x,y,z,s,t,q) x1 <- data.frame(x1) x y z s t q 1 1 1 -19 -6.333333 -38 -6.333333 2 2 8 -

我有一个用这个代码生成的数据帧
x1

x <- c(1:10)
y <- x^3
z <- y-20
s <- z/3
t <- s*6
q <- s*y
x1 <- cbind(x,y,z,s,t,q)
x1 <- data.frame(x1)

    x    y   z          s    t             q
1   1    1 -19  -6.333333  -38     -6.333333
2   2    8 -12  -4.000000  -24    -32.000000
3   3   27   7   2.333333   14     63.000000
4   4   64  44  14.666667   88    938.666667
5   5  125 105  35.000000  210   4375.000000
6   6  216 196  65.333333  392  14112.000000
7   7  343 323 107.666667  646  36929.666667
8   8  512 492 164.000000  984  83968.000000
9   9  729 709 236.333333 1418 172287.000000
10 10 1000 980 326.666667 1960 326666.666667
所以数据帧x2看起来像这样

  x y   z         s   t         q
1 1 1 -19 -6.333333 -38 -6.333333
我需要的结果是,数据框中的每个数字都应该除以x2中对应于其自身列位置的数字。例如,当数据帧
x1
的第3行除以
x2
时,结果应该是
327-0.368421-0.368421-0.368421-9.947336
,但我在Ops.data.frame(x,aperm(数组(STATS,dims[perm])中得到了一个
错误


是否有人可以指出我需要更改什么以获得所需的结果。

问题是由于
x2
是一行数据帧而不是向量。将其转换为
未列出的向量即可:

x2 <- x1[1,]
sweep(x1, 2, unlist(x2), `/`)

    x    y           z           s           t             q
1   1    1   1.0000000   1.0000000   1.0000000      1.000000
2   2    8   0.6315789   0.6315789   0.6315789      5.052632
3   3   27  -0.3684211  -0.3684211  -0.3684211     -9.947368
4   4   64  -2.3157895  -2.3157895  -2.3157895   -148.210526
5   5  125  -5.5263158  -5.5263158  -5.5263158   -690.789474
6   6  216 -10.3157895 -10.3157895 -10.3157895  -2228.210526
7   7  343 -17.0000000 -17.0000000 -17.0000000  -5831.000000
8   8  512 -25.8947368 -25.8947368 -25.8947368 -13258.105263
9   9  729 -37.3157895 -37.3157895 -37.3157895 -27203.210526
10 10 1000 -51.5789474 -51.5789474 -51.5789474 -51578.947368

x2将data.frame转换为矩阵(因为您只有数字数据):


x1您也可以尝试以下方法:

x1 / x1[1, , drop = TRUE]
#     x    y           z           s           t             q
# 1   1    1   1.0000000   1.0000000   1.0000000      1.000000
# 2   2    8   0.6315789   0.6315789   0.6315789      5.052632
# 3   3   27  -0.3684211  -0.3684211  -0.3684211     -9.947368
# 4   4   64  -2.3157895  -2.3157895  -2.3157895   -148.210526
# 5   5  125  -5.5263158  -5.5263158  -5.5263158   -690.789474
# 6   6  216 -10.3157895 -10.3157895 -10.3157895  -2228.210526
# 7   7  343 -17.0000000 -17.0000000 -17.0000000  -5831.000000
# 8   8  512 -25.8947368 -25.8947368 -25.8947368 -13258.105263
# 9   9  729 -37.3157895 -37.3157895 -37.3157895 -27203.210526
# 10 10 1000 -51.5789474 -51.5789474 -51.5789474 -51578.947368

@阿南达·马托这个作品很有魅力,直截了当,干杯汉克斯,这是一个有用的建议
x1 <- as.matrix(x1)

t(t(x1)/x1[1,])

       x    y           z           s           t             q
 [1,]  1    1   1.0000000   1.0000000   1.0000000      1.000000
 [2,]  2    8   0.6315789   0.6315789   0.6315789      5.052632
 [3,]  3   27  -0.3684211  -0.3684211  -0.3684211     -9.947368
 [4,]  4   64  -2.3157895  -2.3157895  -2.3157895   -148.210526
 [5,]  5  125  -5.5263158  -5.5263158  -5.5263158   -690.789474
 [6,]  6  216 -10.3157895 -10.3157895 -10.3157895  -2228.210526
 [7,]  7  343 -17.0000000 -17.0000000 -17.0000000  -5831.000000
 [8,]  8  512 -25.8947368 -25.8947368 -25.8947368 -13258.105263
 [9,]  9  729 -37.3157895 -37.3157895 -37.3157895 -27203.210526
[10,] 10 1000 -51.5789474 -51.5789474 -51.5789474 -51578.947368
x1 / x1[1, , drop = TRUE]
#     x    y           z           s           t             q
# 1   1    1   1.0000000   1.0000000   1.0000000      1.000000
# 2   2    8   0.6315789   0.6315789   0.6315789      5.052632
# 3   3   27  -0.3684211  -0.3684211  -0.3684211     -9.947368
# 4   4   64  -2.3157895  -2.3157895  -2.3157895   -148.210526
# 5   5  125  -5.5263158  -5.5263158  -5.5263158   -690.789474
# 6   6  216 -10.3157895 -10.3157895 -10.3157895  -2228.210526
# 7   7  343 -17.0000000 -17.0000000 -17.0000000  -5831.000000
# 8   8  512 -25.8947368 -25.8947368 -25.8947368 -13258.105263
# 9   9  729 -37.3157895 -37.3157895 -37.3157895 -27203.210526
# 10 10 1000 -51.5789474 -51.5789474 -51.5789474 -51578.947368