0

我正在尝试将以下 data.table 重塑为列联表(不完全是因为我不想将频率作为值,我只想要 0 或 1):

自由度:

ID          CC
990081899A  CC2
990081899A  CC115
990081899A  CC39
990081899A  CC39
990081899A  CC115
990002362D  CC2
990002362D  CC115
990002362D  CC115
990002362D  CC115
990002362D  CC6
990042716D  CC2

我尝试了以下两件事,但得到了相同的结果:

第一的:

Contingency<-with(Df, table(ID,CC))
Diag6<- cbind(ID = rownames(Contingency), apply(Contingency, 2 , as.character))

第二:

我在数据中添加了 value 列,例如 Value = 1: Df:

ID          CC  Value
990081899A  CC2 1
990081899A  CC115   1
990081899A  CC39    1
990081899A  CC39    1
990081899A  CC115   1
990002362D  CC2 1
990002362D  CC115   1
990002362D  CC115   1
990002362D  CC115   1
990002362D  CC6 1
990042716D  CC2 1

并尝试过:

Df<- data.table(dcast(Df,ID~CC,value.var="Value"),key="ID")

两个结果是一样的:

ID  CC115   CC2 CC39    CC6
990081899A  2   1   2   0
990002362D  3   1   0   1

这里我不想要频率,我只想要它是否存在,否则值应该是 0:

ID       CC115  CC2 CC39    CC6
990081899A  1   1   1   0
990002362D  1   1   0   1

任何建议都受到高度赞赏。

4

3 回答 3

2

简单地使用table(DF)会给你你的布局。
然后您可以将所有正值转换为1使用sign

     sign(table(DF))

                CC
    ID           CC115 CC2 CC39 CC6
      990002362D     1   1    0   1
      990042716D     0   1    0   0
      990081899A     1   1    1   0
于 2014-01-31T15:51:37.103 回答
1

我确信这已经在某个地方得到了回答,但table应该能够做到这一点:

with(unique(dat), table(ID,CC) )

#            CC
#ID           CC115 CC2 CC39 CC6
#  990002362D     1   1    0   1
#  990042716D     0   1    0   0
#  990081899A     1   1    1   0

您可以像这样包装上面的内容:

as.data.frame.matrix(with(unique(dat), table(ID,CC) ))

...如果您更喜欢该输出。

#           CC115 CC2 CC39 CC6
#990002362D     1   1    0   1
#990042716D     0   1    0   0
#990081899A     1   1    1   0
于 2014-01-31T05:08:32.000 回答
0

您可以data.table通过将自己的函数传递给dcast

dcast(DF,  ID~CC, fun = function(x) as.integer(length(x)>0))
# Using CC as value column: use value.var to override.
#           ID CC115 CC2 CC39 CC6
# 1 990002362D     1   1    0   1
# 2 990042716D     0   1    0   0
# 3 990081899A     1   1    1   0

或者通过传递包含唯一组合的简化 data.frame

 dcast(unique(DF), ID~CC,fun=length,value.var = 'CC')
于 2014-01-31T05:01:02.937 回答