R: вычесть среднее значение группы / класса из каждого наблюдения - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть фрейм данных X с

  1. столбцом счетчиков (Counts)
  2. столбцом меток классов (Labels)

У меня естьвычислил отдельный фрейм данных Y, который имеет

  1. Столбец меток классов (Labels)
  2. Столбец счетчика классов означает

Я хотел бы создатьновый вектор, который Z путем итерации по каждой строке X и вычитания среднего значения для соответствующего класса из каждого наблюдаемого счета.

Z = [X $ count_1 - Y $ mean_k, ..., X $ count_n- Y $ mean_k]

Я хотел бы сделать это, используя базу R, а не другие пакеты.

Я знаю, что мог бы сделать это, используя цикл for, который проверяет, что метка наблюдаемого числа в X совпадает с меткой среднего значения класса в Y, но это кажется неэффективным.Как я могу векторизовать эту операцию?

Редактировать:

Я понял это.Это дало мне то, что я хотел:

apply (SandwichAnts, 1, function (x) as.numeric (x ["Ants"]) - (mean_fillings [mean_fillings $ Filling == x ["Filling"],] [2]))

1 Ответ

0 голосов
/ 30 сентября 2018
# generate X and Y
X <- data.frame(counts = c(1, 2, 3, 4),
            labels = c('a', 'a', 'b', 'b'))
Y <- aggregate(X$counts, by=list(X$labels),  
           FUN=mean)
colnames(Y) <- c('label', 'avg')
Y
#  label avg
#1     a 1.5
#2     b 3.5

# use the labels as row names for Y
rownames(Y) <- Y$label
D <- X$counts - Y[X$labels, 'avg']
D
# [1] -0.5  0.5 -0.5  0.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...