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