【发布时间】:2012-07-26 16:14:51
【问题描述】:
我有以下问题,我可以解决:
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”, “一种”)。 所以排序是在每个单元格内。
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
如何才能命令(每对变量的短)?
【问题讨论】:
-
你的意思是每对列中的每一行都需要按字母顺序排列吗?如果是这种情况,您应该将该陈述添加到您的问题中,因为它非常不清楚。
-
目前的问题是不连贯的。代码创建的数据框与您提供的示例不匹配。代码数据中只有 2 个“T”。此外,“按字母顺序”操作的性质尚不清楚。你想按第一列倒序排列吗
-
你的
split_col函数给了我一个错误:Error in is.character(pattern) : 'pattern' is missing -
@sebastian-c 检查您使用的是来自 reshape 的 colsplit,而不是 reshape2,反之亦然。
-
@joran 是的,每对列都需要是订单 - 这也可以在拆分之前完成,而不是“TA”将转换为“AT”,但拆分后它是相同的但在一对列中将有“T”和“A”,将是“A”、“T”,我正在更新问题