我有一个包含顺序数据的数据框:
df <- data.frame(
t1=c("e","e","e"),t2=c("e","e","u"),t3=c("e","e","u"),t4=c("e","u","e"),t5=c("e","u","e"))
看起来像
> df
t1 t2 t3 t4 t5
1 e e e e e
2 e e e u u
3 e u u e e
我想将具有状态序列的数据帧转换为具有转换序列的数据帧,如下所示:
> dfNew
t1 t2 t3 t4 t5
1 se ee ee ee ee
2 se ee ee eu uu
3 se eu uu ue ee
其中“s”表示起始状态。
感谢您的帮助。
答案 0 :(得分:5)
这是一种创建过渡数据框的方法:
setNames(as.data.frame(t(apply(df, 1,
function(x)
paste(c("s", head(x, -1)), x, sep = "")))),
names(df))
t1 t2 t3 t4 t5
1 se ee ee ee ee
2 se ee ee eu uu
3 se eu uu ue ee
答案 1 :(得分:3)
使用TraMineR::seqetm
data(actcal)
actcal.seq <- seqdef(actcal,13:24,
labels=c("FullTime", "PartTime", "LowPartTime", "NoWork"))
您的示例似乎是使用print.stslist
创建序列的seqconc
的输出
所以我将创建这个序列manaully
actcal.seqconc <- seqconc(actcal.seq)
这是一个矩阵。因此,我们可以将此函数应用于-
上的拆分,然后根据需要重新组合转换状态。执行此操作的功能如下:
transitions <- function(x, start = 'S') {
x <- unlist(strsplit(x, '-')
paste0(c(start, head(x, -1)), x, collapse = '-')
}
actcal.tseq <- as.matrix(apply( actcal.seqconc, 1, transitions))
如果您希望州之间的转换率使用seqtrate
seqtrate(actcal.seq)
[>] computing transition rates for states A/B/C/D ...
[-> A] [-> B] [-> C] [-> D]
[A ->] 0.986991870 0.005203252 0.001084011 0.006720867
[B ->] 0.009700665 0.970343681 0.007760532 0.012195122
[C ->] 0.005555556 0.014814815 0.934259259 0.045370370
[D ->] 0.008705580 0.006279435 0.014985015 0.970029970