我有一个类似的数据
基本上,我正在尝试合并所有部分,并有一个像这样的输出
df<- structure(list(position = structure(c(6L, 1L, 2L, 3L, 4L, 5L,
1L, 2L, 7L, 1L, 2L, 3L, 4L, 8L, 1L, 2L, 3L, 4L), .Label = c("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15",
"2,3,4,5,6,7,8,9,10,11,12,13,14,15,16", "3,4,5,6,7,8,9,10,11,12,13,14,15,16,17",
"4,5,6,7,8,9,10,11,12,13,14,15,16,17,18", "TP<AMB88", "TP<AMT55",
"TP<ELANE", "TP<RACK1"), class = "factor"), col = structure(c(15L,
6L, 3L, 11L, 5L, 14L, 9L, 18L, 16L, 8L, 13L, 4L, 2L, 17L, 7L,
12L, 1L, 10L), .Label = c("EQMTLRGTLKGHNGW", "GRRLACLFLACVLPA",
"GSLSNYALLQLTLTA", "LGRRLACLFLACVLP", "LSNYALLQLTLTAFL", "MGSLSNYALLQLTLT",
"MTEQMTLRGTLKGHN", "MTLGRRLACLFLACV", "MVKETTYYDVLGVKP", "QMTLRGTLKGHNGWV",
"SLSNYALLQLTLTAF", "TEQMTLRGTLKGHNG", "TLGRRLACLFLACVL", "TP<AMB88",
"TP<AMT55", "TP<ELANE", "TP<RACK1", "VKETTYYDVLGVKPN"), class = "factor")), class = "data.frame", row.names = c(NA,
-18L))
每个部分标题以TP<第一列显示每个字母的位置。第一列是每个字母的位置
所以让我们取第一段数据
TP<AMT55 TP<AMT55
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 MGSLSNYALLQLTLT
2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 GSLSNYALLQLTLTA
3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 SLSNYALLQLTLTAF
4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 LSNYALLQLTLTAFL
基本上,它就像下面这样,但把它分成了不同的组。所以我想合并以上所有内容,并获得以下
TP<AMT55 TP<AMT55
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 MGSLSNYALLQLTLTAFL
现在我正试着把所有的信都放回去,然后拿到上面的
例如,如果我们看看这个
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
MGSLSNYALLQLTLT
3
2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
GSLSNYALLQLTLTA
1对应于第一个中的M2对应于G(第一和第二(3对应于S(在第一和第二个中(等
out<- structure(list(position = structure(c(6L, 1L, 2L, 3L, 4L, 5L,
1L, 2L, 7L, 1L, 2L, 3L, 4L, 8L, 1L, 2L, 3L, 4L), .Label = c("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15",
"2,3,4,5,6,7,8,9,10,11,12,13,14,15,16", "3,4,5,6,7,8,9,10,11,12,13,14,15,16,17",
"4,5,6,7,8,9,10,11,12,13,14,15,16,17,18", "TP<AMB88", "TP<AMT55",
"TP<ELANE", "TP<RACK1"), class = "factor"), col = structure(c(15L,
6L, 3L, 11L, 5L, 14L, 9L, 18L, 16L, 8L, 13L, 4L, 2L, 17L, 7L,
12L, 1L, 10L), .Label = c("EQMTLRGTLKGHNGW", "GRRLACLFLACVLPA",
"GSLSNYALLQLTLTA", "LGRRLACLFLACVLP", "LSNYALLQLTLTAFL", "MGSLSNYALLQLTLT",
"MTEQMTLRGTLKGHN", "MTLGRRLACLFLACV", "MVKETTYYDVLGVKP", "QMTLRGTLKGHNGWV",
"SLSNYALLQLTLTAF", "TEQMTLRGTLKGHNG", "TLGRRLACLFLACVL", "TP<AMB88",
"TP<AMT55", "TP<ELANE", "TP<RACK1", "VKETTYYDVLGVKPN"), class = "factor"),
join = structure(c(7L, 2L, 1L, 1L, 1L, 6L, 5L, 1L, 8L, 4L,
1L, 1L, 1L, 9L, 3L, 1L, 1L, 1L), .Label = c("", "MGSLSNYALLQLTLTAFL",
"MTEQMTLRGTLKGHNGWV", "MTLGRRLACLFLACVLPA", "MVKETTYYDVLGVKPN",
"TP<AMB88", "TP<AMT55", "TP<ELANE", "TP<RACK1"), class = "factor")), class = "data.frame", row.names = c(NA,
-18L))
根据我的理解,您需要取所有条目的最后一个字母,并将其粘贴在第二个条目上,考虑到您的分组(每个分组由TP
定义(。
#make sure columns are character, not factors
df[] <- lapply(df, as.character)
l1 <- split(df, cumsum(grepl('TP', df$position)))
lapply(l1, function(i) paste0(i$col[2], paste(sapply(i$col[3:nrow(i)],
function(j) substr(j, nchar(j), nchar(j))), collapse = '')))
#$`1`
#[1] "MGSLSNYALLQLTLTAFL"
#$`2`
#[1] "MVKETTYYDVLGVKPN"
#$`3`
#[1] "MTLGRRLACLFLACVLPA"
#$`4`
#[1] "MTEQMTLRGTLKGHNGWV"
即使它变得有点拥挤,我们也可以把它送到你想要的结构,
do.call(rbind, lapply(l1, function(i) {dd <- cbind.data.frame(i, join = paste0(i$col[2], paste(sapply(i$col[3:nrow(i)], function(j) substr(j, nchar(j), nchar(j))), collapse = ''))); dd$join <- as.character(dd$join); dd$join[1] <- dd$col[1]; dd$join[3:nrow(dd)] <- ''; dd}))
position col join
1.1 TP<AMT55 TP<AMT55 TP<AMT55
1.2 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 MGSLSNYALLQLTLT MGSLSNYALLQLTLTAFL
1.3 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 GSLSNYALLQLTLTA
1.4 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 SLSNYALLQLTLTAF
1.5 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 LSNYALLQLTLTAFL
2.6 TP<AMB88 TP<AMB88 TP<AMB88
2.7 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 MVKETTYYDVLGVKP MVKETTYYDVLGVKPN
2.8 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 VKETTYYDVLGVKPN
3.9 TP<ELANE TP<ELANE TP<ELANE
3.10 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 MTLGRRLACLFLACV MTLGRRLACLFLACVLPA
3.11 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 TLGRRLACLFLACVL
3.12 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 LGRRLACLFLACVLP
3.13 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 GRRLACLFLACVLPA
4.14 TP<RACK1 TP<RACK1 TP<RACK1
4.15 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 MTEQMTLRGTLKGHN MTEQMTLRGTLKGHNGWV
4.16 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 TEQMTLRGTLKGHNG
4.17 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 EQMTLRGTLKGHNGW
4.18 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 QMTLRGTLKGHNGWV