我有以下问题,我可以解决:
set.seed (1234)
mydf <- data.frame (var1a = sample (c("TA", "AA", "TT"), 5, replace = TRUE),
varb2 = sample (c("GA", "AA", "GG"), 5, replace = TRUE),
varAB = sample (c("AC", "AA", "CC"), 5, replace = TRUE)
)
mydf
var1a varb2 varAB
1 TA AA CC
2 AA GA AA
3 AA GA AC
4 AA AA CC
5 TT AA AC
我想将两个字母分成不同的列,然后按字母顺序排列。
编辑:可以在拆分之前进行排序,例如 var1a 值“TA” var1a 应该是“AT”或拆分后,以便 var1aa 应该是“A”,而 var1ab 应该是“T”(而不是“T”,“A” )。所以排序是在每个单元格内。
split_col <- function(.col, data){
.x <- colsplit( data[[.col]], names = paste0(.col, letters[1:2]))
}
拆分每一列并合并
require(reshape)
splitdf <- do.call(cbind, lapply(names(mydf), split_col, data = mydf))
var1aa var1ab varb2a varb2b varABa varABb
1 T A A A C C
2 A A G A A A
3 A A G A A C
4 A A A A C C
5 T T A A A C
但未解决的部分是我想订购这对列,以便按字母顺序排列列名“a”和列名“b”。因此预期的输出:
var1aa var1ab varb2a varb2b varABa varABb
1 A T A A C C
2 A A A G A A
3 A A A G A C
4 A A A A C C
5 T T A A A C
怎么能命令(每对变量的短)?