在R中使用unsplit

时间:2014-11-13 09:54:28

标签: r

这个问题与here有关,我过早接受,因为它没有解决我实际需要的问题。

数据看起来更像是这样:

m4 <- read.table(header=T, text='
model1  model2   model3   Output Model
0.13    0.113    0.18     0.4     m4
0.157   0.11     0.21     0.50    m4
0.058   0.03     0.18     0.46    m4 ')

m3 <- read.table(header=T, text='
model1  model2   model3   Output Model
0.13    0.113    0.18     0.4     m3
0.157   0.11     0.21     0.50    m3
0.058   0.03     0.18     0.46    m3 ')

m2 <- read.table(header=T, text='
model1    model2 model3 Output  Model
0.200    0.099     NA     NA      m3
0.356    0.25      NA     NA      m3 ')

m1 <- read.table(header=T, text='
model1  model2   model3   Output Model
0.200    0.099     0.3     0.9    m1
0.35     0.252     0.4     0.9    m1 ')

models <- list(m4=m4, m3=m3, m2=m2, m1=m1)

EDIT1:

unsplit所需的结果:

model1  model2   model3   Output Model
0.200   0.099     0.3     0.9     m1
0.35    0.252     0.4     0.9     m1
0.13    0.113    0.18     0.4     m4
0.157   0.11     0.21     0.50    m4
0.058   0.03     0.18     0.46    m4

所需的洗脱必须在unsplit ...范围内...这意味着:第4个列表条目(4,4)==表示第4个列表条目的2行,同样(1,1,1)表示第一个列表有3行的条目。

EDIT2 :有人能指出我在哪里可以阅读有关unsplit的更多信息吗?即使在书本上也找不到任何东西。

编辑3:现在假设我有这个辅助函数为我提供从列表中提取的索引:

mat <- matrix(c(1,1,1,1,1),5,4)
mat[1,1] <- 0.66; mat[1,2] <- 0.33; mat[1,3] <- 0.33
mat[2,1] <- .66; mat[2,2] <- 0.33; mat[2,3] <- 0.33
extract <- apply(as.matrix(mat),1,which.max)

这假设有效:

unsplit(models, extract)

2 个答案:

答案 0 :(得分:1)

unsplit没有按照您的想法行事。要提取第1和第4个模型,您只需要通常的方括号索引。

models[c("m1", "m4")]

models[c(1, 4)]

答案 1 :(得分:1)

您可以使用rbind,只需使用[访问元素:

do.call(rbind, models[c("m1", "m4")])


     model1 model2 model3 Output Model
m1.1  0.200  0.099   0.30   0.90    m1
m1.2  0.350  0.252   0.40   0.90    m1
m4.1  0.130  0.113   0.18   0.40    m4
m4.2  0.157  0.110   0.21   0.50    m4
m4.3  0.058  0.030   0.18   0.46    m4