R data.table заменяет значения нескольких столбцов для всех строк - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть объект data.table, такой как

                          rn ARC_ancestor D2A1 D2B3 D3A1 D4A3 D5B3 H2A3 H2C3 H4A4 H4C2 H5A3
      1:  chromosome_1_6340194_G_C          0/1 <NA>  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1
      2:  chromosome_1_6340269_A_T          0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1
      3:  chromosome_1_6340334_C_T          0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1
      4:  chromosome_1_6340544_T_C          0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1
      5:  chromosome_1_6340577_G_A          0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1
     ---                                                                                         
1188636: chromosome_6_11659513_T_C          0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1
1188637: chromosome_6_11659529_C_T          0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1
1188638: chromosome_6_11659774_T_C          0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1
1188639: chromosome_6_11659789_T_C          0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1
1188640: chromosome_6_11659817_C_T          0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1  0/1

. Я хочу, чтобы для всех r aws я получил сумму столбцов 2:12, 0/1 должно быть считается как отдельный 0 и как отдельный 1. Так, например, в примере я показываю сумму в первой строке = 10, вторую необработанную сумму = 11, et c ... Моя конечная цель - выбрать r aws где необработанная сумма равна макс. 1. Есть небольшая тонкость, в которой это может произойти, необработанный содержит 0/2, и в этом случае это следует рассматривать как 0 / 1.

До сих пор я придумал этот код

GT2 = GT[ARC_ancestor == "0/1", ARC_ancestor:= 1]
GT2 = GT[ARC_ancestor == "0/2", ARC_ancestor:= 1]
GT2 = GT[ARC_ancestor == "1/1", ARC_ancestor:= 1]
GT2 = GT[ARC_ancestor == "./1", ARC_ancestor:= 1]
GT2 = GT[ARC_ancestor == "./2", ARC_ancestor:= 1]

, который работает, и тогда мне нужно будет повторить это для каждого из моих столбцов 2-12. Это кажется неэффективным ... Я хотел бы что-то вроде:

для всех строк, где «0/1» или «0/2» или «1/1» или «./1» или «./2» появляются в столбце 2:12, заменяя «0/1» или « 0/2 "или" 1/1 "или" ./1 "или" ./2 "на 1

Я чувствую, что должен быть способ даже без записи для l oop.

Я попробовал это

GT[, (2:12) == "0/1" := 1]

и получил

Error in `[.data.table`(GT, , `:=`((2:12) == "0/1", 1)) : 
  LHS of := isn't column names ('character') or positions ('integer' or 'numeric')
d>

Я чувствую, что я не тот далеко ... но понятия не имею.

Спасибо

РЕДАКТИРОВАТЬ, фактически любое значение, отличное от "0/1" или "0/2" или "1/1" или " ./1 "или" ./2 "следует заменить на 0.

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