R:列绑定

R:列绑定,r,R,我想合并以下两个表格: > toytable id sid_set 1: 1 a, b, c 2: 2 c, b 3: 3 a 4: 4 d, b > tdf3 value id a b c d 1 1 1 1 0 2 0 1 1 0 3 1 0 0 0 4 0 1 0 1 > class(tdf3) [1] "table" > class(toytable) [1] "data.table" "data.

我想合并以下两个表格:

> toytable
   id sid_set
1:  1 a, b, c
2:  2    c, b
3:  3       a
4:  4    d, b

> tdf3
   value
id  a b c d
  1 1 1 1 0
  2 0 1 1 0
  3 1 0 0 0
  4 0 1 0 1

> class(tdf3)
[1] "table"
> class(toytable)
[1] "data.table" "data.frame"
理想情况下,我需要一个列绑定,该绑定将生成以下形式的data.table:

id a b c d
1  1 1 1 0
2  0 1 1 0
3  1 0 0 0
4  0 1 0 1
我认为这应该是一个简单的cbind,但我一直无法让它工作。我试过:

cbind(tdf3, toytable[, 'id']) # my initial thought
cbind(toytable[, 'id'], tdf3) # just switched position of my args, not expecting any difference
cbind(data.frame(tdf3), data.frame(toytable[, 'id'])) # thought there might be an unusual treatment of data.table objects
具有以下结果或其某些变化:

   id value Freq id
1   1     a    1  1
2   2     a    0  2
3   3     a    1  3
4   4     a    0  4
5   1     b    1  1
6   2     b    1  2
7   3     b    0  3
8   4     b    1  4
9   1     c    1  1
10  2     c    1  2
11  3     c    0  3
12  4     c    0  4
13  1     d    0  1
14  2     d    0  2
15  3     d    0  3
16  4     d    1  4
我认为问题是因为tdf3是一个表对象。我尝试将其转换为data.table对象,但结果是出现了一种奇怪的表示形式:

> data.table(tdf3)
    id value N
 1:  1     a 1
 2:  2     a 0
 3:  3     a 1
 4:  4     a 0
 5:  1     b 1
 6:  2     b 1
 7:  3     b 0
 8:  4     b 1
 9:  1     c 1
10:  2     c 1
11:  3     c 0
12:  4     c 0
13:  1     d 0
14:  2     d 0
15:  3     d 0
16:  4     d 1

如果您有任何关于示例的线索或提示,我们将不胜感激。

根据您的描述,我认为您需要字符串假人,然后您可以使用 concat.split.expanded自splitstackshape


我从data.table中找到了一个含有melt和dcast的解决方案

library(data.table)
toytable <- setDT(toytable)
toytable[,sid_set := as.character(sid_set)]
toytablestr <- cbind(id = toytable[,id],toytable[,tstrsplit(sid_set,"[,]")])
plouf <- melt(toytablestr,measure.vars = patterns("^V"))[is.na(value),value := "None"]
plop <- dcast(plouf,id~value)[,None := NULL][]
library(data.table)
toytable <- setDT(toytable)
toytable[,sid_set := as.character(sid_set)]
toytablestr <- cbind(id = toytable[,id],toytable[,tstrsplit(sid_set,"[,]")])
plouf <- melt(toytablestr,measure.vars = patterns("^V"))[is.na(value),value := "None"]
plop <- dcast(plouf,id~value)[,None := NULL][]
> plop
   id a b c d
1:  1 1 1 1 0
2:  2 0 1 1 0
3:  3 1 0 0 0
4:  4 0 1 0 1