Как вычесть число из столбца и сохранить результат как вектор в R - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь сделать пару вещей здесь, в R. У меня большой набор данных.Мне нужно найти среднее значение столбца SI.x, которое я сделал, затем разбить данные и найти среднее значение SI.x для каждого из подмножеств, что я и сделал.

Но тогда мне нужно вычесть общее среднее значение SI.x (которое я назвал meangen0a, поскольку оно означает среднее поколение, на которое я смотрю) из каждого поднабора средних.Я бы хотел сохранить подмножество средних как вектор, вычесть meangen0a из каждого из них и сохранить результат как другой вектор, так как позже мне понадобится больше векторной математики.

Вот что я сделал до сих пор:

  1. Я получил среднее значение SI.x поколения, которое я смотрю (которое я назвал gen0a):

    meangen0a <- mean(gen0a$SI.x)
    

Это работало нормально.

Я разделил генерацию по лечению (контроль и четыре других) и использовал только те, которые были выбраны (что было обозначено 1 в столбце Select).

gen0ameans <- with(gen0a[gen0a$Select == 1,], aggregate(SI.x, by=list(Generation, SelectTreatment), mean))
colnames(gen0amean) <- c("Generation, "Treatment", "S")

Это дало мне таблицу с поколением (все 0a), пятью обработками и их значениями SI.x.Это то, что я хотел.

Теперь я хочу вычесть общее среднее значение meangen0a из каждого из пяти средств обработки в таблице gen0ameans.Я попытался сделать это:

S0a <- lapply(gen0ameans$S, FUN=function(S) S-meangen0a)

, и он дал мне правильные числа, но не в векторном формате.Мне нужно, чтобы он был в каком-то векторе, потому что позже мне нужно будет поднастроить следующее поколение и вычесть 0a средства из следующего поколения.Когда я пытался сохранить S0a как вектор или матрицу, он не давал мне ни одной строки или столбца тех средств, которые мне бы хотелось.

Любая помощь будет оценена.Спасибо!

Редактировать - Среднее значение gen0a равно -0,07267818.

Таблица gen0ameans выглядит следующим образом:

Generation
-----------------
0a

0a

0a

0a

0a

Treatment
-----------------
Control

Down1

Down2

Up1

Up2

S
-----------------
-0.07205068

-0.08288528

-0.08146745

-0.06296805

-0.06401943

При выполнении команды S0aиз # 3 выше, это дает мне:

[[1]]

[1] 0.0006274983

[[2]]

[1] -0.0102071

[[3]]

[1] -0.008789275

[[4]]

[1] 0.009710126

[[5]]

[1] 0.008658747

1 Ответ

0 голосов
/ 26 ноября 2018

Мы можем сделать это за tidyverse

library(tidyverse)
gen0a %>%
     mutate(Meanval = mean(SI.x)) %>%
     filter(Select == 1) %>%
     group_by(Generation, SelectTreatment) %>%
     mutate(NewMean = mean(SI.x) - Meanval)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...