Как создать новые строки данных на основе других строк - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть фрейм данных (abund), аналогичный наборам данных dune и dune.env, используемым в пакете vegan, за исключением того, что в моих первых трех столбцах обобщены sampleID и два метода, используемых для сбора данных.Данные об изобилии каждого вида собраны.

 SampleID   MethodA     MethodB     SpA    SpB    SpC   ...
 18001        A1          B1          0      3     4 
 18001        A1          B2          1      5     0
 18001        A2          B1          0      7     0          
 18001        A2          B2          0      11    0
 18002        A1          B1          4      1     0
 18002        A1          B2          0      0     3
 18002        A2          B1          0      0     0
 18002        A2          B2          0      8     2
 18003        A1          B1          0      9     0
 ....

Я хотел бы создать новый набор данных (whole) на основе этих данных, но только с SampleID и MethodA в качестве идентификаторов строк.

 SampleID   MethodA     MethodB     SpA    SpB    SpC   ...
 18001        A1          B3          1      8     4 
 18001        A2          B3          0      18    0          
 18002        A1          B3          4      1     3
 18002        A2          B3          0      8     2
 18003        A1          B3          0      9     1
 ....

Дополнительный поворот заключается в том, что вместо простого добавления данных из B1 + B2 я сначала хочу умножить B1 на 15 (то есть: B3 = 15 * B1 + B2).

У меня есть две проблемы.

  1. умножение только определенных строк данных.

Я пытался использовать оператор if:

wholeCalc <- function(MethodB, multiplier=15){
  whole <- MethodB* multiplier
  if(MethodB= "B2") {
    whole <- whole/multiplier
  }
}

-> было множество ошибок, указывающих на то, что я далеко от цели!

выяснить, как группировать данные в зависимости от SampleID и MethodA.

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

aggregate(abund, 
          list(Group=replace(rownames(abund$MethodB),
                             rownames(abund$MethodB) 
                             %in% 
                               c("B1","B2"), 
                             "B3")), 
          sum)

-> Я получаю сообщение об ошибке, что аргументы должны быть одинаковой длины (т. Е. B1 и B2).

whole <- abund %>%
  group_by(SampleID, MethodA)
whole

-> это дает мне тот же набор данных, с которого я начал.

rbind(abund, 
      c(MethodB = "B3", 
        abund[abund$MethodB == "B1", -3] + 
          abund[abund$MethodB == "B2", -3])) 

-> это дает мне ошибку, потому что количество строк для B1 и B2 не совпадают.

Как видите, я совершенно потерян и мне нужна помощь!Я был в лаборатории в течение прошлых нескольких месяцев и позволил моим навыкам R стать ржавым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...