У меня есть кадр данных x1
, который я сгенерированный с этим кодом,Разделив все числа в кадре данных с помощью выбранной строки в том же кадре данных и соответствующее положение столбца в R
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
Теперь я хочу разделить эти данные кадра x1
с первой строки одного и того же кадра данных, поэтому я использую эти следующие строки кода, как описано here
x2 <- x1[1,]
require(stats)
sweep(x1, 2, x2, `/`)
таким образом, кадр данных x2 выглядит как это,
x y z s t q
1 1 1 -19 -6.333333 -38 -6.333333
Конечный результат, который мне нужен, - это каждый из числа в кадре данных, который следует делить на число в x2
, соответствующем его собственной позиции столбца. Например, когда строка 3 кадра x1
данных делится на x2
результат должен быть 3 27 -0.368421 -0.368421 -0.368421 -9.947336
Но я получаю Error in Ops.data.frame(x, aperm(array(STATS, dims[perm])
Может кто-то указать, что мне нужно изменить, чтобы получить желаемый результат.
+1 Хорошая идея. Проще, чем 'sweep'. –
@ Ананда Махто Это работает как шарм и прямо, приветствует – Amm