r mutate (dplyr) столбцы, начинающиеся с "integer" - PullRequest
1 голос
/ 19 марта 2020

Какой самый идиоматический c способ добиться этого? Вот некоторая игрушка data.table:

ID  ARC_ancestor    D2A1    D2B3    D3A1    D4A3    D5B3    H2A3    H2C3    H4A4    H4C2    H5A3
Chrom_3_793_G_T 0/1:3:0,3:2:15,4,0:..   0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    ./.:1:1,0:0:29,3,0:II   0/0:0:0,0:1:0,0,0:..    0/1:3:0,3:2:13,4,0:..   0/0:0:0,0:1:0,0,0:..    0/1:2:0,2:3:11,3,0:..   ./.:1:1,0:0:29,3,0:II
Chrom_3_1387_A_T    ./.:1:1,0:0:29,3,0:II   0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/1:2:0,2:7:10,3,0:..   0/0:0:0,0:1:0,0,0:..
Chrom_3_1398_C_T    0/1:2:0,2:3:12,4,0:..   0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/0:0:0,0:1:0,0,0:..    0/1:2:0,2:5:11,2,0:..   0/0:0:0,0:1:0,0,0:..
Chrom_3_2554_G_A    0/0:64:64,0:42:0,42,1619:.. 0/0:0:0,0:1:0,0,0:..    0/0:3:3,0:9:0,9,89:..   0/0:3:3,0:9:0,9,89:..   0/1:6:3,2:9:8,0,36:..   0/0:2:2,0:6:0,6,59:..   ./.:2:2,0:0:23,0,23:II  0/1:25:18,7:18:18,0,50:..   ./.:3:3,0:0:20,0,50:II  0/0:14:14,0:42:0,42,419:..  0/1:21:17,4:14:14,0,51:..
Chrom_3_2690_C_T    ./.:99:99,0:0:62,0,2312:II  0/0:4:4,0:12:0,12,119:..    0/0:17:17,0:50:0,51,509:..  0/0:11:11,0:33:0,33,329:..  0/0:10:10,0:3:0,0,239:..    0/0:14:14,0:42:0,42,419:..  0/1:10:7,3:16:15,0,37:..    ./.:54:46,7:6:0,4,35:II ./.:12:10,2:6:0,4,34:II 0/0:21:21,0:50:0,63,629:..  ./.:57:57,0:0:8,0,1358:II
Chrom_3_3862_A_G    0/1:130:100,30:12:11,0,52:..    0/0:5:5,0:15:0,15,149:..    0/0:7:7,0:21:0,21,209:..    ./.:5:5,0:0:14,0,104:II ./.:9:9,0:1:2,0,212:II  0/0:13:13,0:39:0,39,389:..  ./.:11:8,3:4:0,1,38:II  0/0:30:30,0:50:0,108,1079:..    0/0:11:11,0:33:0,33,329:..  ./.:79:79,0:1:2,0,1892:II   ./.:68:68,0:1:5,0,1625:II
Chrom_3_3897_C_T    0/1:139:110,29:12:11,0,39:..    0/0:7:7,0:21:0,21,209:..    0/0:8:8,0:24:0,24,239:..    ./.:7:7,0:0:8,0,158:II  ./.:9:9,0:1:2,0,212:II  0/0:17:17,0:50:0,51,509:..  ./.:12:10,2:11:0,10,44:II   0/0:30:30,0:50:0,108,1079:..    0/0:11:11,0:33:0,33,329:..  ./.:78:78,0:0:35,0,1835:II  ./.:70:70,0:0:29,0,1649:II
Chrom_3_4024_T_G    0/0:147:108,38:61:0,65,63:..    0/1:29:21,8:5:2,0,48:.. 0/1:22:19,3:9:8,0,47:.. 0/1:16:8,8:10:9,0,54:.. 0/1:11:8,3:7:5,0,44:..  0/0:19:19,0:50:0,63,629:..  0/1:19:12,7:8:7,0,46:.. 0/1:67:45,21:3:0,0,45:..    0/1:31:17,14:13:12,0,63:..  ./.:94:71,22:9:0,8,44:II    ./.:101:58,43:9:0,8,40:II
Chrom_3_4033_T_G    0/0:149:110,0:54:0,0,0:..   0/1:27:19,8:9:8,0,43:.. 0/1:22:19,3:14:13,0,42:..   0/1:15:7,8:7:5,0,50:..  0/0:11:8,0:8:0,0,0:..   0/0:19:19,0:50:0,63,629:..  0/1:18:11,7:11:10,0,46:..   0/1:72:47,25:10:9,0,51:..   0/1:33:17,16:9:7,0,56:..    ./.:94:73,21:5:0,2,38:II    0/1:103:58,45:5:3,0,45:..

R говорит мне, что тип столбца - "Integer". Я хочу заменить все значения столбцов на 0 или 1. Например, если значение столбца начинается с «0/1», все значение столбца должно быть просто 1.

0/1:2:0,2:3:12,4,0:..

станет

1

Я полагаю, что dplyr mutate подходит для этой задачи, но я не уверен, с чего начать. Я думал о «перекодировании», но, очевидно, что-то вроде этого не работает

DT%>%mutate(ARC_ancestor=recode('0/1'=1))

(и мне нужно было бы сделать это для каждого столбца, кроме первого)

Поскольку R думает, что столбцы целые числа, я должен сначала изменить их тип на символ? Я не знаю, как написать «если целое число начинается с 0/1».

Кроме того, когда оно начинается с «./», его следует заменить на 0

Большое спасибо за любую помощь.

1 Ответ

5 голосов
/ 19 марта 2020

recode сделано для точного соответствия, здесь мы можем использовать case_when с grepl, чтобы найти образец.

library(dplyr)
df %>%
  mutate_at(-1, ~case_when(grepl('^0/1', .) ~ 1L, 
                           grepl('^\\./', .) ~ 0L, 
                           TRUE~ NA_integer_))))

Это заменит все, что не соответствует вышеуказанному шаблону, на NA.

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