sca*_*der 1 r dplyr data.table
我有以下数据框:
\ndat <- structure(list(ref_string = c("K", "Y", "Q", "C", "H", "A", "S", \n"Y", "L", "Y"), peptide_name = c("p47", "p666", "p506", "p356", \n"p598", "p458", "p448", "p117", "p232", "p464"), peptide = c("FKDHKHIDVKgrrrskrrrrTRCYHIDPHH", \n"FKDHKHIDVKsrgrkrrrrrTRCYHIDPHH", "FKDHKHIDVKrrrrskrgrrTRCYHIDPHH", \n"FKDHKHIDVKrrrgrrrrskTRCYHIDPHH", "FKDHKHIDVKrsgrrrrrkrTRCYHIDPHH", \n"FKDHKHIDVKrrrrrkrrgsTRCYHIDPHH", "FKDHKHIDVKrrrrrgrskrTRCYHIDPHH", \n"FKDHKHIDVKkrrrrsrrgrTRCYHIDPHH", "FKDHKHIDVKrkrrrrsgrrTRCYHIDPHH", \n"FKDHKHIDVKrrrrrksrrgTRCYHIDPHH"), status = c(0, 0, 0, 0, 0, \n0, 0, 0, 0, 0)), class = c("rowwise_df", "tbl_df", "tbl", "data.frame"\n), row.names = c(NA, -10L), groups = structure(list(.rows = structure(list(\n 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L), ptype = integer(0), class = c("vctrs_list_of", \n"vctrs_vctr", "list"))), row.names = c(NA, -10L), class = c("tbl_df", \n"tbl", "data.frame")))\nRun Code Online (Sandbox Code Playgroud)\n它看起来像这样:
\n# A tibble: 10 \xc3\x97 4\n# Rowwise: \n ref_string peptide_name peptide status\n <chr> <chr> <chr> <dbl>\n 1 K p47 FKDHKHIDVKgrrrskrrrrTRCYHIDPHH 0\n 2 Y p666 FKDHKHIDVKsrgrkrrrrrTRCYHIDPHH 0\n 3 Q p506 FKDHKHIDVKrrrrskrgrrTRCYHIDPHH 0\n 4 C p356 FKDHKHIDVKrrrgrrrrskTRCYHIDPHH 0\n 5 H p598 FKDHKHIDVKrsgrrrrrkrTRCYHIDPHH 0\n 6 A p458 FKDHKHIDVKrrrrrkrrgsTRCYHIDPHH 0\n 7 S p448 FKDHKHIDVKrrrrrgrskrTRCYHIDPHH 0\n 8 Y p117 FKDHKHIDVKkrrrrsrrgrTRCYHIDPHH 0\n 9 L p232 FKDHKHIDVKrkrrrrsgrrTRCYHIDPHH 0\n10 Y p464 FKDHKHIDVKrrrrrksrrgTRCYHIDPHH 0\nRun Code Online (Sandbox Code Playgroud)\n目前,我的 dplyr 进程对于真实数据集来说很慢:
\nlibrary(tidyverse)\ndat %>% \n dplyr::group_by(peptide_name, peptide) %>% \n mutate(tot = sum(status)) %>% \n filter(tot == 0) %>% \n pivot_wider(names_from = ref_string, values_from = status) %>%\n dplyr::select(-tot) %>% \n ungroup()\nRun Code Online (Sandbox Code Playgroud)\n其产生:
\n# A tibble: 10 \xc3\x97 10\n peptide_name peptide K Y Q C H A S L\n <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>\n 1 p47 FKDHKHIDVKgrrrskrrrrTRCYHIDPHH 0 NA NA NA NA NA NA NA\n 2 p666 FKDHKHIDVKsrgrkrrrrrTRCYHIDPHH NA 0 NA NA NA NA NA NA\n 3 p506 FKDHKHIDVKrrrrskrgrrTRCYHIDPHH NA NA 0 NA NA NA NA NA\n 4 p356 FKDHKHIDVKrrrgrrrrskTRCYHIDPHH NA NA NA 0 NA NA NA NA\n 5 p598 FKDHKHIDVKrsgrrrrrkrTRCYHIDPHH NA NA NA NA 0 NA NA NA\n 6 p458 FKDHKHIDVKrrrrrkrrgsTRCYHIDPHH NA NA NA NA NA 0 NA NA\n 7 p448 FKDHKHIDVKrrrrrgrskrTRCYHIDPHH NA NA NA NA NA NA 0 NA\n 8 p117 FKDHKHIDVKkrrrrsrrgrTRCYHIDPHH NA 0 NA NA NA NA NA NA\n 9 p232 FKDHKHIDVKrkrrrrsgrrTRCYHIDPHH NA NA NA NA NA NA NA 0\n10 p464 FKDHKHIDVKrrrrrksrrgTRCYHIDPHH NA 0 NA NA NA NA NA NA\nRun Code Online (Sandbox Code Playgroud)\n如何使用data.table获得相同的结果?
\n我被困在这里:
\nlibrary(data.table)\ndt <- as.data.table(dat)\ndt[,by = peptide, tot:=sum(status) ]\ndt\nRun Code Online (Sandbox Code Playgroud)\n结果如下:
\n ref_string peptide_name peptide status tot\n 1: K p47 FKDHKHIDVKgrrrskrrrrTRCYHIDPHH 0 0\n 2: Y p666 FKDHKHIDVKsrgrkrrrrrTRCYHIDPHH 0 0\n 3: Q p506 FKDHKHIDVKrrrrskrgrrTRCYHIDPHH 0 0\n 4: C p356 FKDHKHIDVKrrrgrrrrskTRCYHIDPHH 0 0\n 5: H p598 FKDHKHIDVKrsgrrrrrkrTRCYHIDPHH 0 0\n 6: A p458 FKDHKHIDVKrrrrrkrrgsTRCYHIDPHH 0 0\n 7: S p448 FKDHKHIDVKrrrrrgrskrTRCYHIDPHH 0 0\n 8: Y p117 FKDHKHIDVKkrrrrsrrgrTRCYHIDPHH 0 0\n 9: L p232 FKDHKHIDVKrkrrrrsgrrTRCYHIDPHH 0 0\n10: Y p464 FKDHKHIDVKrrrrrksrrgTRCYHIDPHH 0 0\nRun Code Online (Sandbox Code Playgroud)\n我不知道如何对 data.table 使用filter和pivot_wider。
\n这是一个data.table选项,dcast应该用于更广泛的旋转
dcast(
setDT(dat)[
,
tot := sum(status),
.(peptide_name, peptide)
][tot == 0],
peptide_name + peptide ~ ref_string,
value.var = "status"
)
Run Code Online (Sandbox Code Playgroud)
你会看到结果为
peptide_name peptide A C H K L Q S Y
1: p117 FKDHKHIDVKkrrrrsrrgrTRCYHIDPHH NA NA NA NA NA NA NA 0
2: p232 FKDHKHIDVKrkrrrrsgrrTRCYHIDPHH NA NA NA NA 0 NA NA NA
3: p356 FKDHKHIDVKrrrgrrrrskTRCYHIDPHH NA 0 NA NA NA NA NA NA
4: p448 FKDHKHIDVKrrrrrgrskrTRCYHIDPHH NA NA NA NA NA NA 0 NA
5: p458 FKDHKHIDVKrrrrrkrrgsTRCYHIDPHH 0 NA NA NA NA NA NA NA
6: p464 FKDHKHIDVKrrrrrksrrgTRCYHIDPHH NA NA NA NA NA NA NA 0
7: p47 FKDHKHIDVKgrrrskrrrrTRCYHIDPHH NA NA NA 0 NA NA NA NA
8: p506 FKDHKHIDVKrrrrskrgrrTRCYHIDPHH NA NA NA NA NA 0 NA NA
9: p598 FKDHKHIDVKrsgrrrrrkrTRCYHIDPHH NA NA 0 NA NA NA NA NA
10: p666 FKDHKHIDVKsrgrkrrrrrTRCYHIDPHH NA NA NA NA NA NA NA 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |