我有以下数据框:
df1 <- structure(list(group = c("KO", "WT", "KO", "KO", "KO", "KO",
"WT", "KO", "KO", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT",
"WT", "WT", "KO", "KO"), name = c("rike", "rabe", "smake", "rike",
"rike", "rike", "rabe", "rike", "rike", "due", "rabe", "ene",
"ene", "due", "ene", "rabe", "due", "rabe", "due", "smake", "kum"
), type = c("C", "A", "A", "A", "C", "B", "A", "B", "B", "A",
"B", "A", "C", "C", "C", "C", "B", "C", "A", "C", "A"), posit = c(10,
2, 21, 5, 12, 22, 18, 19, 81, 22, 33, 31, 80, 40, 16, 16, 7,
9, 26, 27, 7)), row.names = c(NA, -21L), class = "data.frame")
我想以这种方式组合两列,一个字符("类型")和一个数字("位置"),所有类别(字母)将与相应的假设(数字)连接,例如"A"和"37"作为"A37",给定的"名称"的所有类型-位置对将按升序粘贴到新的列中(从小到大).另外,我希望用":"分隔它们.所需输出如下所示:
df2 <-structure(list(group = c("WT", "WT", "WT", "KO", "KO", "KO"),
name = c("ene", "due", "rabe", "kum", "rike", "smake"), type_posit = c("C16:A31:C80",
"B7:A22:A26:C40", "A2:C9:C16:A18:B33", "A7", "A5:C10:C12:B19:B22:B81",
"A21:C27")), class = "data.frame", row.names = c(NA, -6L))
我可以通过使用一组dplyr函数并创建中间数据帧来实现这一点,如下所示:
df2 <- df1 %>%
dplyr::mutate(t_p = paste0(type,posit)) %>%
dplyr::arrange(name,posit) %>%
dplyr::select(-type, -posit) %>%
dplyr::group_by(group, name) %>%
dplyr::summarise(tag_pos =paste0(t_p, collapse = ":"))
然而,我想知道,是否有更有效和/或更Clean 方法来做到这一点?我想写一个干净的,可理解的代码.