从R中的标签列表列表创建表

时间:2016-04-26 13:29:26

标签: r list tags

我在R中有一个带有标签的大清单。例如:

[[1]]
[1] "A" "C" "E" "F"

[[2]]
[1] "B" "C" "G"

[[3]]
[1] "A"

[[4]]
[1] "B"

[[5]]
[1] "C" "E"

[[6]]
[1] "G"

我需要构建一个包含两个值的表:1 /( - 1),表示行是否有标记(1)或不是(-1)。

    "A" "B" "C" "E" "F" "G"
[1]  1  -1  -1   1   1  -1
[2] -1   1   1  -1  -1   1
[3]  1  -1  -1  -1  -1  -1
[4] -1   1  -1  -1  -1  -1
[5] -1  -1   1   1  -1  -1
[6] -1  -1  -1  -1  -1   1

2 个答案:

答案 0 :(得分:7)

这是一种适合你的方法。

首先,我们将列表命名为(否则我们不能使用stack):

names(dat) <- 1:length(dat)

然后我们把它变成长:

dat2 <- stack(dat)

让我们的桌子变得简单:

res <- with(dat2, table(ind, values))
res[res==0]<--1

>res
   values
ind  A  B  C  E  F  G
  1  1 -1  1  1  1 -1
  2 -1  1  1 -1 -1  1
  3  1 -1 -1 -1 -1 -1
  4 -1  1 -1 -1 -1 -1
  5 -1 -1  1  1 -1 -1
  6 -1 -1 -1 -1 -1  1

使用的数据:

dat <- list(c("A","C","E","F"),c("B","C","G"),"A","B",c("C","E"),"G")

答案 1 :(得分:5)

我们可以使用mtabulate

library(qdapTools)
d1 <- mtabulate(l1)
d1[d1==0] <- -1
d1
#   A  B  C  E  F  G
#1  1 -1  1  1  1 -1
#2 -1  1  1 -1 -1  1
#3  1 -1 -1 -1 -1 -1
#4 -1  1 -1 -1 -1 -1
#5 -1 -1  1  1 -1 -1
#6 -1 -1 -1 -1 -1  1

数据

l1 <- list(c("A", "C", "E", "F"), c("B", "C", "G"), "A", "B", 
    c("C", "E"), "G")