Работа в таблице - функция для работы с суммами маржи и отдельными значениями - PullRequest
2 голосов
/ 02 ноября 2011

Вот мой маленький набор данных

set.seed(123)
X1 <- rep(1:3, each = 4)
X2 <- c(1:4, 1:4, 1:4)
Y <- rnorm (12, 4, 20)
myd <- data.frame(X1, X2, Y)

# "unmelten" form of the dataframe 
aggregate(Y ~ X1, myd, 'c')
  X1         Y.1         Y.2         Y.3         Y.4
1  1  -7.2095129  -0.6035498  35.1741663   5.4101678
2  2   6.5857547  38.3012997  13.2183241 -21.3012247
3  3  -9.7370570  -4.9132394  28.4816359  11.1962765

Фактическая матрица данных больше по размеру. Я хочу написать функцию, которая использует расплавленную форму данных для математики, как это:

 Example for X1, Y1.1 cell 

  (X1,Y.1) - sum(X1 row) - sum(Y.1 column) + grand total (= sum(Y))
    -7.2095129 - ( -7.2095129 - 0.6035498 + 35.1741663  + 5.4101678) - ( -7.2095129 + 6.5857547 -9.7370570) + sum ( all values in the able)

Два других примера, чтобы прояснить мою точку зрения.

For X2, Y1.1 cell
     (X2,Y.1) - sum(X2 row) - sum(Y.1 column) + grand total (= sum(Y))

For X3, Y.3 cell  
     (X3,Y.3) - sum(X3 row) - sum(Y.3 column) + grand total (= sum(Y))

Аналогично, будет выведена матрица размером 3 x 4 для каждой ячейки в матрице.

Я пытался написать функцию, чтобы сделать это, но мог получить любую идею. помогите пожалуйста

1 Ответ

1 голос
/ 02 ноября 2011

Просто сделай это

z1 <- aggregate(Y ~ X1, myd, 'c')[,-1]
ans <- z1 - rowSums(z1) - colSums(z1) + sum(z1)

         [,1]      [,2]      [,3]      [,4]
[1,]  64.98307  65.92300  20.13181  34.45743
[2,]  31.60013 106.46100  75.71199 -40.37646
[3,] -17.03576  31.87768 108.41788  85.46648
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...